Мне нужно реализовать два индекса b-tree из двух разных таблиц pgsql, желательно в памяти в том же поле, на котором запущен процесс веб-сервера python (запросы должны быть как можно быстрее). Мне было интересно, что лучший способ осуществить это:Параметры базы данных B-Tree
- индекс и поддерживать сбалансированные деревья в памяти в процессе (вручную с помощью библиотеки Python)
- Реализовать индекс в отдельном, в памяти базы данных (Redis , mongo и т. д.)
- Используйте базу данных графа, такую как neo4j или flock (предлог для игры с новой жарой)
- Тонкая настройка pgsql для самих индексов. (За счет снижения производительности для других данных, находящихся в базе данных?)
Мои потребности, в порядке важности:
- скорость запроса
- ближайшего соседа поиск *
- индекса размера
- с открытым исходным кодом
- Python привязки :)
Дополнительные примечания: Деревья могут доходить до нескольких тысяч узлов сразу, придется выдерживать высокие вставки/скорость удаления
* Так что, если я ищу 756.837, но только 755,928 и 757,113 существуют, возвращать либо один в зависимости от параметры
Чтобы быть ясным, эта база данных postgres будет обслуживать традиционные данные webapp crud, поверх обрабатываемых данных. Я готов добавить сложность для поддержания производительности для данных webapp.
.. что касается таких вещей, как elasticsearch/solr? (но это может быть излишним, если вам не нужны такие вещи, как полнотекстовый поиск и т. д.) – redShadow
@redShadow, вероятно, может быть избыточным, поскольку я просто индексирую диапазон объектов по их числовому значению – pdeuchler
Сколько данных вы говоря о? При достаточном объеме оперативной памяти postgres помещают всю базу данных в память. Учитывая надежность postgres, похоже, было бы сложнее построить и поддерживать отдельное решение, чем просто позволить движку сделать это за вас. – thisfeller