簡體   English   中英

我應該如何/使用什么數據庫將可查詢列表存儲在數據庫中? 鏈接表似乎非常過度和緩慢?

[英]How/what DB should I use to store a queryable list in a database? Linked tables seems very excessive and slow?

我正在開發一個將擁有數百萬個主鍵(用戶 ID)的項目。 每個用戶都會有一個未知長度的屬性列表(在 1 到 100 之間,但在幾乎所有可能的屬性總數約為 1000 個的情況下通常 < 5)。 此列表需要可查詢,但才能找到具有相同屬性的用戶。

我將如何做到這一點? 一種方法似乎是為每個用戶創建一個唯一的表,但這意味着我會有很多看起來錯誤的表。 使用的其他方法似乎是將列表存儲為 blob,但這會使查詢變得困難。

我更喜歡使用 python 但如果我相當輕量級的服務器遇到問題,我可能會切換到 c++。 到目前為止,我使用的唯一 sql DB 是 SQLite 但這可能並不理想,因為它每秒無法處理足夠的提交(盡管我可以排隊)。

我應該使用什么數據庫,我應該如何正確地做到這一點?

對於這種情況,我猜基於圖形的數據庫GDB是不錯的選擇。

您可以將屬性定義為節點; 著名且強大的基於圖形的數據庫之一是Neo4jNeo4j 沒有表 Neo4j 使用Cypher (圖形查詢語言)來處理其查詢。

來自 Neo4j 網站:

與將數據按行、列和表排列的傳統數據庫不同,Neo4j 具有由數據記錄之間的存儲關系定義的靈活結構。 使用 Neo4j,每個數據記錄或節點都存儲指向它所連接的所有節點的直接指針。 因為 Neo4j 是圍繞這種簡單而強大的優化設計的,所以它執行復雜連接查詢的速度比其他數據庫快幾個數量級,而且深度更深。

來自 Neo4j 網站關於 Cypher:

使用 Neo4j,數據之間的連接被存儲——而不是在查詢時計算。 Cypher 是一種功能強大的圖形優化查詢語言,可以理解並利用這些存儲的連接。 當試圖在數據中找到模式或洞察力時,Cypher 查詢通常比大量的 SQL JOIN更簡單、更容易編寫。 由於Neo4j 沒有表,因此無需擔心 JOIN。

您可以在他們的網站主頁上找到與 SQL 的一些比較: https://neo4j.com/

如果您想在 python 中使用 Neo4j,請檢查這些鏈接:

  1. https://neo4j.com/developer/python/
  2. https://pypi.org/project/neo4j-driver/
  3. https://towardsdatascience.com/neo4j-cypher-python-7a919a372be7

暫無
暫無

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

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