【发布时间】:2013-03-16 10:38:10
【问题描述】:
我需要实现两个不同 pgsql 表的两个 b-tree 索引,最好在运行 python webserver 进程的同一个盒子上的内存中(查询需要尽可能快)。我想知道实现这一点的最佳方法:
- 在进程内的内存中索引和维护 b 树(使用 python 库手动)
- 在单独的内存数据库(redis、mongo 等)中实现索引
- 使用 Neo4j 或 Flock 之类的图形数据库(玩新热点的借口)
- 调整 pgsql 以自行创建索引。 (以数据库中其他数据的性能下降为代价?)
我的需求是,按重要性排列:
- 查询速度
- 最近邻搜索*
- 索引大小
- 开源
- python 绑定 :)
附加说明:树一次可以达到数千个节点,必须承受高插入/删除率
*所以如果我搜索 756.837,但只有 755.928 和 757.113 存在,则根据参数返回其中一个
需要明确的是,这个 postgres 数据库将在处理的数据之上提供传统的 webapp crud 数据。我愿意增加复杂性以维护 webapp 数据的性能。
【问题讨论】:
-
..像 elasticsearch/solr 这样的东西呢? (但如果您不需要全文搜索等内容,这可能是一种矫枉过正)
-
@redShadow 可能有点矫枉过正,因为我只是通过关联的数值索引一系列对象
-
你在说多少数据?有了足够的 RAM,postgres 会将整个数据库放入内存中。鉴于 postgres 的稳健性,似乎构建和维护一个单独的解决方案比让引擎为你做这件事更难。
-
@thisfeller 可能不超过一个千兆字节,最多可能两个。我考虑过这一点,但是我已经在一些 web 应用程序表上建立了索引,我真的宁愿不牺牲性能提升。如果检索用户个人资料的时间比处理用户数据的时间长,那么用于我的数据处理的快速索引毫无价值。
-
@thisfeller 另外,如果要更多地研究它,我将不得不同时并且经常地
REINDEX。不幸的是,我认为我将不得不使用更神秘的东西
标签: database postgresql indexing b-tree