2016-06-21 77 views
0

有谁知道任何对基于位置的索引有原生支持的数据库(SQL或NoSQL)吗?数据库位置索引

为了澄清,在很多情况下,我需要维持一个基于头寸的收款,订单或头寸由外部实体(用户,外部服务等)维护。通过维护,我的意思是集合中的项目顺序会经常更改,但并不基于记录中的任何数据字段,就维护集合的服务而言,顺序完全是任意的。该服务需要提供一个接口,允许按位置插入CRUD函数(在Pos X后插入,在Pos Y中删除等)以及操纵位置(从pos X移到pos Y)。

我知道有解决方法,你可以做到这一点,我已经实现了很多自己,但这似乎是一个非常基本的方式来索引数据。所以我不禁感到现在必须有一个现成的解决方案。

我唯一看到的就是Redis的List数据类型,尽管它按位置排序,但它相当有限(与具有多个索引的表相比),而Redis更适合作为Cache比持久数据存储。

最后我问这是因为我有一个需求,需要用户可能包含10,000条记录的订购集合。

+0

Postgres的数组让人浮想联翩,但是你无法真正做到你想要的CRUD内容。虽然你可以编写可以做到这一点的函数。而对于整数数组,这已经可以作为扩展 –

+0

@a_horse_with_no_name我不知道关于postgres数组,谢谢你。他们在列上,所以不是一个索引,但可能是有用的,我会玩。扩展名是[intarray](https://www.postgresql.org/docs/9.5/static/intarray.html)吗? –

+0

您可以对列进行索引以加快查找速度。 'intarray'提供了额外的操作符和函数来处理整数数组(仅限整数) –

回答

0

万一它帮助任何人,我迄今发现的最好的近似值是在图数据库(如Neo4J)中实现链接列表结构。维护商品链接比维护位置列要容易得多(特别是如果您只需要下一个链接,即不是双重链接)。这很容易,因为不需要留下空位,重新索引等,你只需要移动指针(或关系)。性能非常好,但是如果您尝试按位置访问列表末尾的项目,则读取速度会线性下降,因为您必须从头到尾扫描(SKIP)整个列表。