2016-06-21 76 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)整個列表。