V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
black11black
V2EX  ›  Java

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

  •  
  •   black11black · 2020-08-22 05:59:55 +08:00 via Android · 4400 次点击
    这是一个创建于 1539 天前的主题,其中的信息可能已经有所发展或是发生改变。
    利益相关: 在学校里没接触过相关概念,毕业后也没用过

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    你觉得,如果不从头修炼,他如何回答这些问题?
    gaius
        21
    gaius  
       2020-08-24 02:34:07 +08:00 via Android
    mit 6.824 ,cmu 15-721 入门。
    🐶 想啥呢肯定直接买商用
    gaius
        22
    gaius  
       2020-08-24 02:37:25 +08:00 via Android
    而且确定需要 oltp ?
    chinafengzhao
        23
    chinafengzhao  
       2020-11-09 03:43:06 +08:00 via iPhone
    @gaius 这两个专业
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1102 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:37 · PVG 06:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.