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 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢 ...
随机推荐
- 简单粗暴的实现 Blazor Server 登录鉴权
既然是简单粗暴,那么就不用关心诸如 IDentityServer4,OAuth 之类的组件,也不使用 AuthenticationStateProvider.IAuthService, razor 页 ...
- 获取sql语句
1.$model->_sql(); 方法实际执行的就是 $model->getLastSql(); 2.fetchSql fetchSql用于直接返回SQL而不是执行查询,适用于任何的CU ...
- CMake 属性之目标属性
[写在前面] CMake 可以通过属性来存储信息.它就像是一个变量,但它被附加到一些其他的实体上,像是一个目录或者是一个目标.例如一个全局的属性可以是一个有用的非缓存的全局变量. 在 CMake 的众 ...
- 1.1 HELLO 窗口
跟着教程,开始第一步创建窗口吧!这一节不涉及太多知识. 本节会出现一些名词,我们现在只需要知道它们大概是干什么的就行. ● GLFW:一个专门针对OpenGL的C语言库,通过它提供的接口,我们就可以渲 ...
- [快速阅读八] Matlab中bwlookup的实现及其在计算二值图像的欧拉数、面积及其他morph变形中的应用。
以前看过matlab的bwlookup函数,但是总感觉有点神秘,一直没有去仔细分析,最近在分析计算二值图像的欧拉数时,发现自己写的代码和matlab的总是对不少,于是又去翻了下matlab的源代码,看 ...
- JS 识别安卓还是ios苹果、识别是否微信内置浏览器、手机类型
1.识别手机平台是IOS还是安卓 /** * [isMobile 判断平台] * @param test: 0:iPhone 1:Android */ function ismobile(test) ...
- SSIS ODBC方式连接mysql数据库
系统环境:WIN 10 64位 1.安装Mysql odbc connector 插件 文章说明链接: https://www.cnblogs.com/santiagoMunez/p/4780301. ...
- 一款.NET开源的屏幕实时翻译工具
前言 今天大姚给大家推荐一款.NET开源的屏幕实时翻译工具:Translumo. 工具介绍 Translumo是一个.NET开源的高级屏幕翻译工具,能够实时检测和翻译选定区域内的文本(如字幕).Tra ...
- 如何使用Flask编写一个网站
使用Flask编写一个网站是一个相对简单且有趣的过程.Flask是一个用Python编写的轻量级Web应用框架.它易于上手,同时也非常强大,适合构建从简单的博客到复杂的Web应用的各种项目.以下是一个 ...
- AlignSum:数据金字塔与层级微调,提升文本摘要模型性能 | EMNLP'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: AlignSum: Data Pyramid Hierarchical Fine-tuning for Aligning with Human ...