我需要实现两个不同pgsql表的两个b-tree索引,最好是在运行python webserver进程的同一个框中的内存中(查询需要尽可能快)。我想知道实现这个的最佳方法:
我的需求按重要性顺序排列:
附加说明:树木一次可以达到几千个节点,必须忍受高插入/删除率
*因此,如果我搜索756.837,但只存在755.928和757.113,则根据参数返回其中一个
要明确的是,这个postgres数据库将在正在处理的数据之上提供传统的webapp crud数据。我愿意增加复杂性来维护webapp数据的性能。
答案 0 :(得分:0)
第一步是看看你能在多大程度上推动PostgreSQL索引做你想做的事情。典型的btree索引速度很快,但它们没有很多功能。特别是,他们不能很好地进行搜索。根据您的需要,您可能希望将索引从Btree更改为GiST。 GiST提供KNN搜索(假设您的数据类型支持这一点!)并允许您执行许多其他正在寻找的内容。缺点是,根据您的数据类型,您可能最终需要进行一些编程才能获得对某些数据类型的适当支持。
GiST提供比标准btree索引更多的搜索选项,但查询速度也慢一些。然而,主要优点是它们支持比GIN索引高得多的插入/更新速率,并且它们也支持knn搜索。
如果这对您不起作用....您可能希望在内存中实现其他内容,可能使用内存缓存(如memcached),甚至只需使用普通的Sys V IPC和单独的进程。但要注意并发访问内存!