Bigtable 是针对每个操作还是批量将操作写入日志?

Posted

技术标签:

【中文标题】Bigtable 是针对每个操作还是批量将操作写入日志?【英文标题】:Does Bigtable write operations to the log for every single operation or in batches? 【发布时间】:2016-02-26 17:01:32 【问题描述】:

我想知道 Google 的 Bigtable 如何保持持久性。当写入操作进入时,tablet 服务器会更新内存中的“hashmap”,并将其写入日志文件。这样一来,如果 tablet server 死掉了,一个新的 tablet server 可以读取所有最近的操作,并与死掉的 tablet "equal"。

这是有道理的,但是将每个操作写入日志服务器而不是批量写入(因为它是写入磁盘)不会减慢速度吗?

【问题讨论】:

【参考方案1】:

让我们依次回答这些问题。

Bigtable 是针对每个操作还是分批将操作写入日志?

Bigtable 将每一个操作写入持久性日志,而不是批量写入。换句话说,它是同步的,而不是异步的:当服务器响应客户端时,数据已经写入日志(持久且可复制),而不仅仅是内存。

如果存储系统只写入内存,并批量写入日志,则如果服务器在接受一些写入后但在将它们刷新到日志之前崩溃,它将丢失仅在内存中的数据。

这是有道理的,但是将每个操作写入日志服务器而不是批量写入(因为它是写入磁盘)不会减慢速度吗?

Bigtable 背后的分布式文件系统(以前的 Google File System,现在的 Colossus)比典型的文件系统快得多,即使它是分布式的并且每次写入都是复制的。

在使用YCSB 的基准测试中,Google Cloud Bigtable 已在读取和写入方面展示了single-digit millisecond latency,甚至在尾部:

【讨论】:

以上是关于Bigtable 是针对每个操作还是批量将操作写入日志?的主要内容,如果未能解决你的问题,请参考以下文章

java如何对数据库的数据进行批量删除之后接着做批量增加,删除和增加是一次操作完成

DynamoDB 中的批量写入操作是不是使用多线程策略?

Python自动化办公批量将文字写入Word文件中的具体操作

Python自动化办公批量将文字写入Word文件中的具体操作

EF的批量操作

Elasticsearchelasticsearch里面的关于批量读取mget的用法