NoSQL 述评
作为主库的 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 做缓存从某种角度就是靠程序员手写物化视图。
不过也有人在 redis 上直接做业务的,例如秒杀——sorry,秒杀不算,秒杀场景用到的是 redis 的分布式锁功能,不属于 cache。
我们说 cache 是视图也就意味着它的变动是由数据变更后反映出来的,例如有一些场景订单量骤增,数据更新慢要排队列,因此自己先更新 cache,后面再同步,舍弃一致性以追求响应。这种做法破坏了因果链,就像论坛发帖,有些人先把帖附加在 HTML,看起来好像成功了,响应非常快,用户就把网页关了,导致帖子最终消失。我不认为是一种恰当的做法。像这种订单场景,增加一个 PENDING 状态的订单就可以了。当然 cache 派也可以继续声称这种 cache 就是订单表的 PENDING 分表,似乎也说得通,但是查询就要两头查了。
既然 ScyllaDB 可以充当 cache,并且还有牛X的物化视图,如果 ScyllaDB 支持事务,ScyllaDB 是不是最佳选择?
以前我会倾向这个看法,但我现在不这么认为。实际上所有搞关系模型的 NoSQL(NewSQL) 都有点误入歧途。这些数据库都要定义表,不同的是表有一些独特的有趣的字段类型,如 list set 等等,甚至还支持未声明的字段,看起来很酷很 nosql。的确,这种模型就有点像鸟笼,静态为主动态为辅,很有巧思,但它对 ORM 框架设计者提出了新的要求,这种 list set 类型的字段,如何映射?一个 list(int),很可能存的都是 id,本质上是 list(subclass)。
其次,cassandra 有这些字段,别的数据库有别的字段,很难形成一套普适的 ORM 框架。这是 NewSQL 很大的误区。
因此,如果事务支持得当 mongodb 及 couchbase 是最有价值的,couchbase 已经收费,退出了竞争。mongodb 这种文档数据库结合 ODM 技术,可将 Schema 完全置于编程语言,彻底摆脱关系依赖,由此可以彻底解决阻抗失配问题,让建模变得极其简单,这是新项目弯道超车的好方案。
另一方面,假如要适配这些数据库,一套 ORM 映射是不够的,可能要针对每个数据库做一套 DO。在入库时 O -> DO 入库,查询时 DO -> O 供用户使用。这套 multi DO 观念可以兼容 redis 等 cache,后面系统可以考虑这样设计。
class User{
}
class UserRedis{
static UserReids fromUser(User user){}
static User toUser();
}
class UserMongo{
...
}
class UserPG{
...
}
class UserScylla{
}
NoSQL 述评的更多相关文章
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- 非关系型数据库(NoSql)
最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...
- 关系型数据库与NoSQL数据库
关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...
- 几款主流 NoSql 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- “NOSQL” 杂谈
引言: nosql 的兴起和革命,在我看来已经开始逐渐影响到了传统的sql的地位,但是仅仅是影响而已,取代是不太可能的. 正文: 两年前,一个偶然的机会开始接触到 nosql ( mongodb ). ...
- Squirrel: 通用SQL、NoSQL客户端
安装 配置数据库 配置驱动 配置连接 如果你的工作中,需要使用到多个数据库,又不想在多种客户端之间切换来切换去.那么就需要找一款支持多数据库的客户端工具了.如果你要连接多个关系型数据库,你就可以使用N ...
- NoSQL和MongoDB
NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”.关系数据库关注在关系上,NoSQL关注在存储上. 发展背景 (1)传统关系型数据库遇到了性能瓶颈. 高并发读写(High ...
- NoSQL指南
一.数据库发展 1.早期出现的数据库包括平面文件数据管理系统.分层数据管理系统和网络数据管理系统,分别对应的数据结构是线性表.树和图. 平面文件数据管理系统是使用磁带对数据进行顺序存储的,带来的问题不 ...
- NoSQL与RDBMS的九点区别联系
原文链接:http://blog.sina.com.cn/s/blog_5373fb0b0101ft8a.html 1 理解ACID与BASE的区别(ACID是关系型数据库强一致性的四个要求, ...
- 本人为巨杉数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github
一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...
随机推荐
- store文件夹的处理,vuex模块化modules
index文件代码: import Vue from "vue"; import Vuex from "vuex"; // 导入根getters import ...
- 59.ref和reactive的区别
首先,ref和reactive 定义响应式数据的,& vue3中的数据分为 2 类,一类没有响应式数据 第二类是响应式数据 : 如果没有使用ref 或者 reactive 定义数据,那么默认是 ...
- 用自定义功能区完成Excel两种颜色的交错填充
今天需要用Excel中的填充颜色完成两种颜色的交错填充 在excel中,选择一个颜色填充后,再切换到另一个颜色,再点击填充.操作起来会显得比较笨重 于是萌生了一个想法,是否可以通过Excel的自定义功 ...
- php运行redis测试
在今天将官方的redis教程看完之后,想自己来一个测试. 按照官方给出的代码: 1 <?php 2 //连接本地的 Redis 服务 3 $redis = new Redis(); 4 $red ...
- docker存储配置与管理--项目三
一.Docker存储概念 1.容器本地存储与Docke存储驱动 容器本地存储:每个容器都被自动分配了内部存储,即容器本地存储.采用的是联合文件系统.通过存 储驱动进行管理. 容器本地存储空间:分层结构 ...
- Power BI新卡片更改显示单位
Power BI 不知道什么时候发布了新卡片,照现在官方来说,该视觉对象目前还属于预览版,但已经可以正常使用了,对比旧的卡片,显示效果个人觉得会友好一些,详见官方说明:创建"新"卡 ...
- 不敢相信,Nginx 还能这么玩?
大家好,我是程序员鱼皮.今天来聊聊 Nginx 技术,这是一个企业项目必用,但是却经常被程序员忽略的技术.学好 Nginx,可以助你在求职中脱颖而出. 或许你会想:"Nginx 不就是用来部 ...
- cmu15545-数据存储(Database Storage)
蓝图 数据库自己管理磁盘数据和缓冲区,而不是通过操作系统管理(Os is not your friend.). 三层视图 数据库以页(page)为存储数据的基本单位,文件(file)是一系列页的集合, ...
- 2022年3月(202203)小米路由R3G(3G)刷openwrt和padavan的总结
本篇文章是本人这2天刷小米路由R3G的记录,中间可能有很多错误,欢迎留言指出. 1.千万别断电 2.刷机的时候要多等待 小米路由很多型号有着很强的可玩性,128M以上的ROM,256M以上的内存,R3 ...
- php 异步并行后续--兼容FPM使用的组件
上次给人推荐了这篇文章,关于PHP异步并行的文章,之后有人评论问这个组件能不能给fpm用,我测试了一下发现不行,于是又找到一个可以给fpm用的http请求组件. 安装很简单,就这样 composer ...