• YunTable开发日记(3) – BigTable的数据模型和调用接口 (转载)


    源地址:http://peopleyun.com/?p=665

    本文将深入分析BigTable的数据模型,并介绍它是如何被调用的。

    数据模型

    就像向我之前所说的那样,其实BigTable顾名思义,是一个非常大的表,而且是一个能存储几十亿行(Row)和几千列(Column)的非常巨大的表。什么表会怎么大呢?接下来,举一些简单的例子,比如:用于中国所有公民的个人信息和Internet上所有网站内容的表,这些表的总体规模可以达到PB以上级别,而且这些表的规模都会与日增长,所以很显然需要使用分布式的方法,而不是使用一台机器来承载这个巨大且不断增长的Table。首先,会介绍一下BigTable最基本的数据模型,也就是table。

    Table

    Table图1.  Table

    这就是Table(表格),虽然上面截图只有三个Row和五个Column,但由于这个表会存储中国所有公民的个人信息,所以会有十三亿多Row和几百多Column,接下来,将介绍为了提高访问效率和伸缩性的两个特性:Colunm Family(列组)和Tablet(片)。

    Column Family

    Column Family图2. Column Family

    由于每个表格都会有成百上千的Column,而大多数查询只需得到其中少数几个Column,所以如果每次查询都将所有的Column取出来的话,这样会得不偿失,所以Google在BigTable的设计中引入了Column Family这个特性,通过这个特性能将多个Column并为一个小组,比如上图的“家庭地址”和“工作地址”都隶属于“地址”这个Column Family,这样做的最大的好处是能将这些Column放在一起存储,这样不仅能提高存取效率,而且能避免读取过多的Column,比如可以选择只读取一个Column Family。

    Tablet

     Tablet图3 Tablet

    这个非常容易理解,就是BigTable系统会自动根据Row Name的范围,来将数据复制到不同的服务器上。

    Timestamp

    为了帮助数据的同步和备份,可以为每个Cell(单元格)设置相应的Timestamp,而且系统可以根据Timestamp来做GC(Garbage Collection)。

    调用接口

    Google的BigTable的调用接口主要以API为主,下面是一些示例代码,主要参考自BigTable的Paper。

    //打开Table

    Table *T = OpenOrDie(“/peopletable”);

    //找到相应的Row,并做相应的更新

    RowMutation r1(T,”310101”);

    r1.Set(“地址:家庭地址”,”SH88”);

    //执行更新

    Operation op;

    Apply(&op, &r1);

    //创建用于查询的Scanner

    Scanner scanner(T);

    ScanStream *stream;

    //查询相关的代码:1. 锁定“地址”这个Cloumn Family;2.返回所有版本;3. 查找Row Name是”310101”的列。

    stream = scanner.FetchColumnFamily(“地址”);

    stream->SetReturnAllVersion();

    scanner.Lookup(“310101”);

    //打印

    for(;!stream->Done();stream->Next()){

        printf(“%s %s %lld %s\n”,Scanner.RowName(), stream->ColumnName,

                                             stream->TimeStamp,  stream->Value);

    }

    下篇开发日记将关注BigTable的存储模型。


  • 相关阅读:
    CopyOnWriteArrayList与ConcurrentHashMap
    Latch、Barrier、ThreadLocal
    Future和FutureTask
    SingleThreadExecutor、FixedThreadExecutor、CachedThreadPool、ScheduledThreadPoolExecutor
    ThreadPoolExecutor
    ConcurrentLinkedQueue
    PriorityBlockingQueue
    pom activeByDefault 不生效
    配置log4j2日志报错 Cannot find the declaration of element 'Configuration'
    顶级技术盛会KubeCon 2020,网易轻舟布道多云环境云原生应用交付
  • 原文地址:https://www.cnblogs.com/licheng/p/1821903.html
Copyright © 2020-2023  润新知