B树数据库选项

时间:2013-03-26 15:01:43

标签: database postgresql indexing b-tree

我需要实现两个不同pgsql表的两个b-tree索引,最好是在运行python webserver进程的同一个框中的内存中(查询需要尽可能快)。我想知道实现这个的最佳方法:

  1. 在进程内(使用python库手动)索引和维护内存中的b-tree
  2. 在单独的内存数据库(redis,mongo等)中实现索引
  3. 使用像neo4j或flock这样的图形数据库(借助新的热度来玩)
  4. 调整pgsql来自己完成索引。 (代价是数据库中其他数据的性能下降?)
  5. 我的需求按重要性顺序排列:

    • 查询速度
    • 最近邻搜索*
    • 索引大小
    • 开源
    • python绑定:)

    附加说明:树木一次可以达到几千个节点,必须忍受高插入/删除率

    *因此,如果我搜索756.837,但只存在755.928和757.113,则根据参数返回其中一个

    要明确的是,这个postgres数据库将在正在处理的数据之上提供传统的webapp crud数据。我愿意增加复杂性来维护webapp数据的性能。

1 个答案:

答案 0 :(得分:0)

第一步是看看你能在多大程度上推动PostgreSQL索引做你想做的事情。典型的btree索引速度很快,但它们没有很多功能。特别是,他们不能很好地进行搜索。根据您的需要,您可能希望将索引从Btree更改为GiST。 GiST提供KNN搜索(假设您的数据类型支持这一点!)并允许您执行许多其他正在寻找的内容。缺点是,根据您的数据类型,您可能最终需要进行一些编程才能获得对某些数据类型的适当支持。

GiST提供比标准btree索引更多的搜索选项,但查询速度也慢一些。然而,主要优点是它们支持比GIN索引高得多的插入/更新速率,并且它们也支持knn搜索。

如果这对您不起作用....您可能希望在内存中实现其他内容,可能使用内存缓存(如memcached),甚至只需使用普通的Sys V IPC和单独的进程。但要注意并发访问内存!