簡體   English   中英

SQL 或 NoSQL 數據庫中有很多小樹結構

[英]Lots of small tree structures in SQL or NoSQL Databases

我想將信息存儲在數據庫中許多不同樹的節點上。

首先將有超過 20000 個節點在 500 棵樹之間共享,每個節點將有 5 個數字屬性。 一旦構建,每個節點都需要引用它的所有直接子節點,而不需要引用其他節點。

我需要在初始化時在 memory 中構建所有樹,並在程序進入停機時間后更新/添加節點(可能每隔一小時左右,盡管越多越好)。

我已經查看了 sql 鄰接 model 似乎構造每個表需要太長時間(必須進行太多的數據庫調用),嵌套集 model 是一種可能性,但擴展樹更復雜會發生很多,它增加了數據庫的復雜性,因為我認為這可能是一個非常基本的結構和查詢集。

我也查看了 MongoDb 但它似乎更適合 JSON 類型的對象,我正在使用 java,並且可能會超過殺死它的數量(如果定義的節點數量過多,HBase 也可能會被殺死)很有用,這對未來來說是一種可能性,我可以增加對數據庫的寫入時間,這也是一個優勢)

有人對我如何 go 有什么建議嗎?

NoSql dbs 是否矯枉過正? 他們在存儲樹結構方面做得更好嗎? 將它們與 sql 數據庫一起使用是不好的做法嗎?

如果您刪除(rgt - lft - 1) / 2產生嵌套集合上的子屬性數量,並為 lft/rgt 列使用浮點數,則可以在最短的時間內插入/更新/刪除節點。

這樣做的主要問題是避免與精度相關的問題。 您可以通過將 lft/rgt 轉換為數字並返回到浮點數來解決后者,以獲得它們的規范表示。 Postgres 示例:

select (.1::float + .7::float) * 10::float;                          -- 8
select floor((.1::float + .7::float) * 10::float);                   -- 7
select floor(((.1::float + .7::float) * 10::float)::numeric::float); -- 8

另一個問題相當容易管理,並且在您用完空間時發生:您有時需要重新索引部分或全部樹 - 它需要鎖定樹,但速度足夠快,您可以在不影響正常操作的情況下這樣做.

如果您使用的是 SQL Server 2008+,則可以使用適用於此類場景的新HierarchyID數據類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM