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 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...
随机推荐
- war3辅助代码及运行方式
打开VS2019 点这个 自动生成这么一堆代码,全删了,就剩这些就行 然后点这里 然后向CPP里粘贴以下代码 #include "tlhelp32.h" HANDLE hwnd = ...
- USB gadget驱动框架(五)
本节主要分析虚拟串口的tty设备的注册.创建/dev/ttyGSx设备节点.tty相关接口的实现. tty的申请与注册 源码:drivers/usb/gadget/function/u_serial. ...
- BPF BTF 详解
1. 介绍 BTF(BPF Type Format)是内嵌在BPF(Berkeley Packet Filter)程序中的数据结构描述信息.BPF原本是用于数据包过滤的编程语言,但随着eBPF(ext ...
- vue前端开发仿钉图系列(5)右侧编辑页面的开发详解
右侧编辑页面主要有两个入口,一是添加marker或者线面双击结束的时候,新建数据信息:二是点击底部数据的单元行或者查看编辑或者点击地图上的marker以及线面,编辑相关数据.整理总结不易,如需全部代码 ...
- threejs - 渲染第一个3D场景 - 旋转的正方体
1. 安装 threejs & 使用 2. 创建三要素 场景 scene 相机 camera 渲染器 render 3. 场景 new THREE.Scene() 相机分为 2 种 1. ...
- 有封装过v-model相关的双向绑定组件吗?
有的,之前在做⼀个通⽤的上传组件的时候,⼀开始是通过传统的⽗⼦通信实现的,⽗传⼦实现的图⽚ 回显,⼦传⽗实现的图⽚url抛出传给给接⼝,后来使⽤v-model做了⼀点优化,简单了不少 追问: 具体是怎 ...
- 云游戏平台陷入苦战,继青椒云,云更新,顺网云后,ToDesk正在布局云电竞市场
在日新月异的科技浪潮中,云游戏正在逐步成为游戏产业的重要分支.根据中国信通院<2023年全球云游戏产业深度观察及趋势研判研究报告>,2022年中国云游戏市场收入达到63.5亿元,同比增长5 ...
- C221027B
B 抽 \(n\) 次卡, 连续 \(i\) 次没有抽中时, 第 \(i+1\) 次抽中的概率是 \(p_i\), 规定\(p_k=1\), 求期望抽中次数. 标签:矩阵加速递推, 动态规划. 暴力: ...
- 开源 - Ideal库 - 常用时间转换扩展方法(一)
从事软件开发这么多年,平时也积累了一些方便自己快速开发的帮助类,一直在想着以什么方式分享出来,因此有了这个系列文章,后面我将以<开源-Ideal库>系列文章分享一些我认为比较成熟.比较方便 ...
- 记录一个vscode无法ssh树莓派,但是mobaxterm可以ssh登录的问题
一.为什么会遇到这个问题 帮别人开发一个树莓派小车的时候,买了一个新的树莓派3B,回来安装好桌面系统之后开启了ssh功能,便想开始使用vscode来ssh开发,省的后续一直要插着屏幕开发,很麻烦.但是 ...