作为主库的 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 完全置于编程语言,彻底摆脱关系依赖,可以彻底解决阻抗失配问题,让建模变得极其简单。