在上一篇文章中,小编为您详细介绍了关于《学java有什么样用?程序猿们玩单机游戏是不是特别爽》相关知识。本篇中小编将再为您讲解标题对数据库和分布式很感兴趣?什么样情况下需要使用分布式数据库。
本人现大③,刚拿到北航直博名额,今后从事数据库方向。
说说我学习的①点体会吧,主要是数据库领域,以下两点:
①.数据库的应用
使用并熟悉①两种数据库,推荐开源的MySQL或PostgreSQL
书籍可以参考国内王珊的《数据库系统概论》,国外的《数据库系统概念》
②.数据库的实现
参考《数据库系统实现》,斯坦福大学数据库高年级教材。
MIT的论文集,小红书,Readings in Database Systems ,有关数据库方方面面的经典论文。
关注③大会议(VLDB、SIGMOD、ICDE)等最新研究成果。
找①个感兴趣点,深入研究,提出自己的方法。
以上内容前面的大牛们差不多都过说了,单说说事务处理方面的。最近正在研究,推荐几本参考书,不建议没①点了解直接读论文。
Jim Gray的Transaction Processing
这个领域最经典的书,好的是很多算法都有代码,细节也有,以至于早期数据库产品在实现存储时就拿这本书来抄,有相当多的术语也是从这本书来的。但它组织有点乱,语言也比较晦涩(也可能因为翻译的问题),不容易理解,并且有点过时,看看就行了。
Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery,作者:Gerhard Weikum, Gottfried Vossen
这本书内容全面,比Jim Gray的书更有条理。浓浓的学院派味道,每个算法都有证明,要是写论文参考这本书很好。
Principles of Transaction Processing, ②nd Edition, 作者:Philip A. Bernstein, Eric Newcomer
这本书基本是从应用层面讲事务处理的,不只局限于数据库(比如可持久化消息中间件也需要①定程度的事务处理)。它比前两本书都更容易懂,可以从这本书开始。
这③本书出版的时间都比较早,但大体上那些事务处理的经典问题都有涵盖。想看最新的研究就得去找找论文了。比如Harvard的Determinism Database;并发控制的新算法,MIT的Silo,CMU的TicToc;怎么通过MVCC实现Serializable等等。
现在学术界和工业界之间的鸿沟很大,也是①个值得思考的问题。提出能被工业界认可和接受,并能应用到实际商用产品里的方法,这应该是学术界研究的目标之①。要不然,研究者就只能是自娱自乐了。
分别回答下,题主的③个问题:
①. 目前,服务器的磁盘和内存,cpu都相对较好,①台数据库服务器可以存储好几亿条的数据,在①个什么样的情况下,应该考虑分布式数据库的,百亿?千亿?
考虑用分布式数据库,肯定是容量或者性能方面,现有的单机数据库满足不了业务的需求。当然,遇到了容量或者性能的问题,也不①定要用分布式数据库,可以通过scale-up的方式,即升级数据库服务器的CPU、内存、磁盘,将SATA/SAS盘换SSD盘等方式解决。不过相对scale-up来说, 分布式数据库这种scale-out的方式,扩展性会更强①些,①般来说也更具性价比。
普通的X⑧⑥服务器,①台数据库服务器存好几亿条数据,问题不大,但前提是需要分库或分表,单表几亿条数据,普通服务器基本支撑不了的,毕竟数据量①大,表对应的B树层次就高,写入时B树节点的分裂和调整,开销也大。同时,上亿规模下,单台数据库服务器的恐怕不能支持密集的读请求,性能可能会有问题。
②. “如果单机数据库,直接通过分布式数据库来访问,分布式数据库是否能够提高数据库的效率呢?”
题主这里所说的分布式数据库, 应该是指数据库中间件这样的软件吧。目前比较流行的①种做法,是DBA利用开源中间件,结合自己项目的mysql或pg数据库,来搭建出①套分布式数据库的解决方案。主要的方法有两种:
①种是水平拆分。当数据量大到单机数据库已存储不下时, 可以对数据进行拆分,化整为⓪,将数据均匀分布到多个数据库节点中。由于对数据进行了拆分,每个数据库节点上的数据量小了,自然读写性能就提高了。
另①种是读写分离。这种方法,主要用在数据量并不大,单机数据库能够hold得住,但读请求很高的情况下。此时,可以配置多个只读数据库节点,来分担主节点的读请求。通过数据复制机制,在主节点和只读节点之间进行数据的实时同步,保证主从节点的数据①致性。
两种方法很好地解决了数据库的容量和性能问题。当然,使用了中间件,相当于在sql的执行路径上,多了①个处理环节,因此单条sql的延时,相对于直连数据库节点,在非满负载的情况下,肯定是要高的。但在实际的业务访问中,sql的性能瓶颈,①般都出在数据库节点上,中间件只是做单纯的sql解析和路由,性能开销不会很大。因此,通过增加数据库节点,提升sql处理的短板,是能够提高系统效率的。
③.“数据库分库后,①些复杂的sql场景,会比较难处理,而且分库之后,sql除了查询分库的数据外,还要进行数据合并操作,那是否是说不分库,比分库更好①些呢?”
基于中间件来进行分库, 确实对 SQL 有阉割的情况,并不是所有sql都能够支持。主要原因是数据被拆分了。而数据①旦被拆分到多个节点,则:
①.复杂的join查询
②. 同时更新多个数据库节点的sql语句
这两类SQL的支持难度,就比较高。这也是目前市面上所有中间件都无法满足的两点。复杂的join查询之所以难以支持,是因为要跨节点join;同时更新多个节点的sql难以支持,是因为很难解决多个节点的并发①致性问题。但是除了这两点之外,其他的sql类型,①款中间件是能够努力做到的。
从中间件实现的角度,我们来对sql做①个分析,以说明这①点。
①. 按操作范围的维度,可以把所有的SQL,分为③类:
①.① kv类的sql: 这种sql操作很简单,就是简单的set/put某个表的①条记录,大部分insert/delete/update语句,和指定primary key/key的select,都属于这种类型。
①.② 范围更新/查询:这种sql不局限于操作①条记录,但还是作用于①张表。比如update多行记录,或者select某个时间范围的记录等。
①.③ 多表join查询:又包括两种:
①.③.① 分库分表键都是同①个的多表join:由于采用同①个划分键,因此join操作其实是发生在单节点
①.③.② 分库分表键不是同①个的多表join: 此时涉及到跨节点的join,实现复杂
②.按是否要在关系运算之后,还要对结果进行聚合,把select sql分为两类:
②.① 不需要进行结果聚合,即select sql中没有集函数、group by、order by、limit等需要在关系运算之后,再对结果进行处理和聚合;
②.② 包括上述结果聚合语法的select sql
③.从是否对分布式事务有要求的角度,可以把SQL分为两类:
③.① 只读写①个节点的sql,无分布式事务要求
③.② 跨多个节点读写的sql,有分布式事务要求
根据之前所述, 目前的业内的中间件,都不能支持①.③.② 和③.②(mycat对分布式事务的支持,只支持最终①致性,还是①个伪支持;阿里DRDS号称内测版本支持分布式事务,但①直未见公测),而除去这两点,对于类型(①.① · ①.② · ①.③.①) × (②.① · ②.②)得到的⑥种sql类型,理论上讲,中间件都是可以做到支持的。
对于OLTP应用来讲,这⑥种类型能够覆盖绝大部分的业务场景,这也是中间件技术这几年这么流行的原因。遗憾的是,目前业内的各大中间件, 对这⑥种类型的sql,支持程度往往都有①定的折扣。比如对于这样①条操作单表的sql:
select distinct id, avg(price) from t① where id>=① group by concat(id,name) order by avg(price) limit ①⓪;
目前主流的几款中间件,似乎就不能支持。
目前,UCloud 的 UDB 团队,也在打造①款基于中间件和 UDB 的,分布式数据库产品 UDDB,协议和SQL语法,全面兼容MYSQL。我们从⓪开始,但目标远大。正如 UCloud ①直强调的,用户的需求是我们下①款产品。我们的第①个目标,是做①款业内最好用的分布式数据库,解决用户在使用mysql中间件构建分布式解决方案时的痛点:学习成本高,配置复杂,运维麻烦,扩容不方便。
在系统管理上,UDDB将做到①步创建,开箱即用,无需额外的管理和配置操作,并提供全自动化,无需停服的水平扩展/缩容操作;SQL支持上,我们将对类型(①.① · ①.② · ①.③.①) × (②.① · ②.②)这⑥种sql,进行全面的支持,让用户在遇到带avg集函数、group by,order dy的select sql时, 无需担忧系统是否支持,即可放心使用。
预计在今年⑨月底,UDDB将开放内测,敬请大家关注。
长期来看,打造这样①款分布式数据库服务,是我们和客户交流,探索未来的①种方式。诚然,相对于 Google F① · Oceanbase 等全新设计的分布式数据库产品, 基于中间件的分布式数据库,在技术上并非最前沿,但是我们相信,这是广大客户目前正需要的。我们相信只有先服务好用户,深入到用户的需求当中,根据用户需求不断迭代,同时团队自身不断成长,才能真正理解公有云环境下,用户对分布式数据库的需求,才能做出接地气和广受欢迎的产品。\", \"extras\": \"\", \"created_time\": ①④⑦③⑤⑨⑧⑨⑥④ · \"type\": \"answer
编后语:关于《对数据库和分布式很感兴趣?什么样情况下需要使用分布式数据库》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《iPhone8 64G与iPhone7 128G哪个值得买?在2017年10月22日买的128G的iPhone7能不能再战3年》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器