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如何对数据库的数据进行批量删除之后接着做批量增加,删除和增加是一次操作完成
Python自动化办公批量将文字写入Word文件中的具体操作