想要学习分布式数据库应该如何入门?

2020-08-22 05:59:55 +08:00
 black11black
利益相关: 在学校里没接触过相关概念,毕业后也没用过

事情是这样,我司最近几个月时间在做的一个项目后台数据规模在几十亿(不到一百亿)的水平,好在可用性需求不是特别高,我们当初开会最后决定入库还是用 oracle 硬刚。

最近在 v2 看到一些帖子提到分布式数据库的概念,以前感觉一直是个比较神秘的领域,但是最近正好借着项目机会,是不是能更容易理解概念了,心想是不是能把这部分知识学起来

主要问题就是对分布式数据库相关完全不了解,不知道概念从哪澄清,从哪入门。

分布式数据库是不是就是合理搭建以后,对外表现无限接近于传统数据库,但是可用性有明显提高这样?再加上存储也是分布在不同节点的?
4489 次点击
所在节点    Java
23 条回复
singerll
2020-08-22 06:28:36 +08:00
阿里云官方的 drds 文档
opengps
2020-08-22 07:29:59 +08:00
先搞清楚用分布式的目的:
硬盘空间不够?
硬盘 io 不够?
副本容灾?
yulang
2020-08-22 08:42:29 +08:00
我们最近正在搞分布式数据库,可以交流下
kidlj
2020-08-22 09:16:16 +08:00
TiDB
CockroachDB
sparkle2015
2020-08-22 10:28:28 +08:00
PingCAP University 以及 PingCAP Talent Plan 了解一下: https://university.pingcap.com/ https://university.pingcap.com/talent-plan/ 教你学习,使用和实现分布式数据库
snappyone
2020-08-22 10:30:36 +08:00
raft 论文走一遍,看明白了论文就全懂了
zoharSoul
2020-08-22 10:42:14 +08:00
阿里云 drds 掏钱就行了
azureus
2020-08-22 11:09:03 +08:00
可以了解一下腾讯开源的 tbase,分布式数据库
chihiro2014
2020-08-22 14:53:20 +08:00
学下 6.824 和 DBMS 差不多就行了
TypeError
2020-08-22 18:31:43 +08:00
强烈推荐“DDIA” 中文书名《数据密集型应用系统设计》

跟着翻一遍就可以系统了解数据库和分布式系统了,
深入的话可以跟着书中给出的论文引用走
laminux29
2020-08-22 19:17:08 +08:00
如果你有时间,或者自己能挤出时间,并且有两三年的学习计划,建议是:

模电 -> 数电 -> 组成 -> 汇编 -> C/C++ -> Java/C#/PHP/Python -> 操作系统 / 计算机网络 / *多媒体 -> 数据库 -> 分布式。

之所以要这样设置,是因为,分布式主要是为了能以低成本来解决性能问题。

性能问题,要弄彻底清楚原因,需要从模电开始。

然后汇编、C/C++以及操作系统,能够从指令、操作、基本架构上说明单机的性能问题。

计算机网络、数据库,这些是对分布式问题的应用。

多媒体作为选修,如果工作有接触,可以去了解一下。
black11black
2020-08-23 04:43:40 +08:00
@opengps 目的是提高可用性,以后跳槽时可以回答人家的百万并发问题
black11black
2020-08-23 04:46:35 +08:00
@laminux29 神 tm 从模电开始,我本人比较孤陋寡闻,无名三本毕业的,我们学校组原也是从数电开始讲,我想听大神讲讲模电怎么影响分布式性能的?
labulaka521
2020-08-23 13:41:06 +08:00
@laminux29 建议从造 cpu 硬盘 内存开始
yanyueio
2020-08-23 18:09:42 +08:00
让题主从头开始修炼的也真是够了。

分布式数据库多半就是 redis, cassandra, mongodb, hbase 这类 nosql 了,和传统数据库的百万级数据量不同,这里处理能力都在百万以上,多半是集群方式部署的。抽象来看(从外部来看)他们既可以是 source,也可以作为 sink,所以说和传统数据库用起来有啥不同,外部是感受不到的(但实际上内部是不同的,比如存储方式,核心数据模型) --- 一般都会有类似传统 SQL 一样的封装 API 给你。

但分布式数据库引入了高可用,高并发存储的同时也引入了诸如一致性问题,节点维护,通信问题,备份容灾等等,这比传统数据库的主从复制, 分表分库等要复杂一些。

入门的话,找一个分布式数据库比如 hbase 看看就知道怎么回事儿了,其他虽然有不同但只要不离开分布式(相对的是单机),大同小异。
black11black
2020-08-23 18:35:41 +08:00
@yanyueio 感谢回复,分布式都是基于 nosql 技术吗?跟想象中差别很大,几个问题,一个比如 nosql 放在内存里实际上能存的数据很少,比如我们这种百亿级的业务,一般内存扛不住。再一个是持久化储存的问题,为了防止突发情况断电丢数据,一般应该都会有一些持久化策略,但是毕竟 nosql,边际情况的可靠性如何确保呢?
yanyueio
2020-08-23 19:41:22 +08:00
@black11black 这个要具体数据库具体分析。你问的问题已经设计到了其存储模型。首先这些 nosql 本身没有约束限制,所以存储起来要比检查约束的传统数据库快;其次,诸如列式存储的 hbase 更是如此,即并非都是行式存储。最后,nosql 并非都是 redis 这样存储在内存中的(分布式计算框架才大多都是在内存中处理),他们多半也是要落地到磁盘&文件系统,然而集群的读写,外加底层有 hdfs 等这样专门设计的文件系统,所以读写效率也是不错的,至少比传统型的 oracle 抗打(不绝对啊,你可以参考一下 ocean base 这类与 oracle 集群的对比看看是否有虚假宣传)。最后可靠性问题,这本质是集群管理的问题,比如 leader 挂了,怎么重新选举,怎么冗余备份等,具体还是要落实到各个数据库,比如 cassandra 解决方案就是无中心化架构,不分主从。一点浅见,仅供参考。
laminux29
2020-08-23 20:22:44 +08:00
@black11black 思考一下,为什么高温会影响电脑运算速度。

另外,提高技术水平,会受很多因素。专业学习是一方面,思想品德也很重要。
laminux29
2020-08-23 20:29:50 +08:00
@labulaka521 CPU 和内存这种门槛太高的就不说了,说说简单一些的存储设备吧,你可以尝试举出几种你知道的存储设备类型,然后思考一下,这些存储设备,是因为怎样的需求而诞生的?
laminux29
2020-08-23 20:34:26 +08:00
@yanyueio

你如果觉得,我建议题主从头修炼不合适,那么,就说说你提到 nosql 与传统数据库,对于以下问题:

1.nosql 与传统数据库,为什么会存在性能差别?

2.既然 nosql 性能那么高,为什么很多项目选型仍然会选择传统数据库?

3.nosql 为什么通常会采用分布式,而非单机方式来部署?

你觉得,如果不从头修炼,他如何回答这些问题?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700418

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX