Database-Design

我們的案例是否適合 NoSQL 數據庫解決方案?

  • December 15, 2017

我們目前正在執行一個查詢 SQL MariaDB(通過 SQLAlchemy)的 Python Web 應用程序。不幸的是,我們遇到了 MariaDB 的一些硬性限制(連接數限制為 61),並且正在尋找替代方案。我們的數據庫不是很大(通常小於 2GB 並且增長緩慢),條目實際上可以很好地分解為簡單的 json 對象,這讓我們看到了 NoSQL 解決方案。

最初,這似乎是一個很好的解決方案。查詢非常快(因為數據庫適合 RAM),我們很高興(幾天)。

**不過,如果 NoSQL DB 是滿足我們需求的推薦解決方案,我來這裡尋求建議。**那麼讓我們談談數據:

我們數據的本質是多組條目/行通常引用回同一個對象,就像您有多個與單個對象相關的版本一樣。

假設文件條目可能如下所示:

_id: 5a31...
description: Object
   location: "XYZ"
   name: "ABC"
   status: "A"
   m_nr: null
   k_nr: null
   city: "QWE"
   high_value: 17
   right_value: 71
more_data: Object
   number: 101
   interval: 1
   next_date: "2016-01-16T00:00:00Z"
   last_date: null
   status: null
classification: Object
   priority_value: "?"
   redundancy_value: "?"
   active_value: "0"

想像一下,description.location遺囑經常需要進行分組和排序,以便我只能顯示$last每個分組條目的條目。一個常見的查詢可能如下所示(in MongoDB):

db.getCollection('a').aggregate(
   [{ $sort:
       {"description.location": 1}
    },
    { $group:
       {_id: "$description.location"}
    }]
)

不幸的是,我發現這個特定的查詢需要很長時間,當數據庫不適合記憶體時——即使在 MongoDB中存在索引。description.location(由於某種原因,$group聚合操作似乎從未使用可用索引,而$sort實際上確實使用了它)。

無論哪種方式,這種數據/佈局/查詢策略是否與 NoSQL DB 產生了很好的共鳴?

我看到您對 JSON 對象的興趣。

我們的數據庫不是很大(通常小於 2GB 並且增長緩慢),條目實際上可以很好地分解為 簡單的 json 對象,這讓我們看到了 NoSQL 解決方案。

MongoDB更適合大型數據庫,在您的情況下,我建議 PostgreSQL

您可以在 PostgreSQL 中使用 JSON 類型:https ://www.postgresql.org/docs/current/static/datatype-json.html

將您的應用程序遷移到 PostgreSQL 應該很容易,因為它一直是 SQL,我懷疑您會發現那個愚蠢的連接限制。

無論哪種方式,這種數據/佈局/查詢策略是否與 NoSQL DB 產生了很好的共鳴?

使用 NoSQL 時性能是有代價的,很多時候,您將不得不修改您的程式碼、您的數據庫架構、您的伺服器配置。你準備好付出代價了嗎?

回答你的問題,我盡量避免 MongoDB 聚合,更喜歡在現場手動聚合(我的原始碼是我的 SQL),但我這樣做是針對小範圍的。如果做整個表/集合,最好使用 Map-Reduce 或 Aggregation 或自定義程式碼?這取決於,誰做得更快?

大多數時候,人們會建議對您的數據進行非規範化處理,但這樣做可能會導致其他一系列問題。再次,付出代價。

引用自:https://dba.stackexchange.com/questions/193107