NoSQL 述評

Inshua發表於2024-10-10

作為主庫的 nosql 只有 CockroachDB、TiKV 以及 MongoDB(從4.0後基本可用),CockrouchDB 已經收費,另外 YugabyteDB 也可選,但大家的反饋都不好。

不考慮事務的業務可以考慮 ScyllaDB,如資料偏文件則可使用 MongoDB。ScyllaDB 可以兼當 cache。

當然,更專用的 cache 是 redis, garnet 等,想省錢則 kvrocks,只要響應速度能滿足要求能省則省。

所謂 cache 本質上就是物化檢視,也叫做 continuous view。ScyllaDB 對此有很好的支援 ScyllaDB 物化檢視 | ScyllaDB 文件,最早看到這個是在 greenplumn,我藉助 canal 在 mysql 上實現了一個初級的 hotview。所以用 redis 做快取實際上就是靠程式設計師手寫物化檢視。

那麼,如果 scylladb 支援事務,scylladb 是不是最佳選擇?

NO。這裡有個嚴重的問題。實際上所有搞關係模型的 NoSQL(NewSQL) 都有點誤入歧途。比如 cassandra,要定義表,這種表有一些自己的有趣的欄位型別,如 list set 等等,甚至還支援未宣告的欄位,看起來很酷很 nosql。的確,這種模型就有點像鳥籠,靜態為主動態為輔,很有巧思,但它對 ORM 框架設計者提出了新的要求,這種 list set 型別的欄位,如何對映?一個 list(int),很可能存的都是 id,本質上是 list(subclass)。

其次,cassandra 有這些欄位,別的資料庫有別的欄位,很難形成一套普適的 ORM 框架。

這是 NewSQL 很大的誤區。

因此,如果事務支援得當 mongodb 及 couchbase 是最有價值的,couchbase 目前已經收費了,退出了競爭。mongodb 這種文件資料庫結合 ODM 技術,可將 Schema 完全置於程式語言,徹底擺脫關係依賴,可以徹底解決阻抗失配問題,讓建模變得極其簡單。