分布式系统
文章平均质量分 93
不动明王1984
就怕其心一也
展开
-
Dremel:在网络规模数据集上的交互式分析
Dremel是一个在只读的嵌套数据上的可伸缩的、交互式的点对点的查询系统。通过结合多层执行树和列式数据布局,其有能力在数秒之内在万亿行的表上成功执行聚合查询。系统可以扩展到数千个CPU以及PB级的数据,且在Google有成千上万的用户。在本论文中,我们描述了Dremel的架构和实现,并解释它是如何补充基于MapReduce的计算的,我们展示了一个新颖的列式存储表达,其支持嵌套格式的记录,并讨论了在数千节点的系统上做的一些实验。翻译 2023-07-08 09:27:15 · 269 阅读 · 0 评论 -
BigTable:一个针对结构化数据的分布式存储系统----论文摘要
Bigtable是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB级的数据。Google的很多项目使用Bigtable存储数据,包括Web索引、Google Earth、Google Finance。这些应用对Bigtable提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。尽管应用需求差异很大,但是,针对Google的这些产品,Bigtable还是成功的提供了一个灵活的、高性能的解决方案。本论原创 2023-07-17 08:33:58 · 389 阅读 · 0 评论 -
Kudu:在快速修改数据上的快速分析存储系统----论文摘要
从一个用户的角度看来,kudu是一个对结构化数据表的存储系统。一个kudu集群可以包含任意数量的表,每个表都有一个定义良好的有明确列数的schema。每一列都有名字、类型及可选的是否可为null值。一些固定顺序的列被指定为primary key。主键强制了一个唯一约束,并作为可高效更新或删除的主索引。该模型比较类似于关系型数据库,而与很多其他分布式数据存储如Cassandre, MongoDB, BigTable等不同(有明确的列定义这点),而spanner与metastore可认为是半结构化表。原创 2023-06-27 00:01:22 · 210 阅读 · 0 评论 -
Dynamo:Amazon的高可用性键-值存储系统
本文介绍Dynamo的设计和实现,一个高度可用的key-value存储系统,一些Amazon的核心服务使用它用以提供一个“永远在线”的用户体验。为了达到这个级别的可用性,Dynamo在某些故障的场景中将牺牲一致性。它大量使用对象版本和应用程序协助的冲突协调方式以提供一个开发人员可以使用的新颖接口。(典型的NoSQL的KV系统的数据和事务的模型选型)翻译 2023-07-08 14:43:06 · 372 阅读 · 0 评论 -
Spanner: Google的全球分布级数据库----论文摘要
Spanner中一个新奇的time api揭示了时钟的不确定性。该api及其实现对于支持外部一致性(外部观察一致性)以及一系列强力的特性至关重要,这些特性包括:对过去版本数据的无阻塞读(对于历史数据的读不加锁,且不会被其他事务阻塞)、无锁的只读事务(只读事务不加锁,但是有可能被其他事务阻塞)、以及在整个spanner集群中原子性的修改schema。原创 2023-07-08 12:43:08 · 660 阅读 · 0 评论 -
Spanner的TrueTime与分布式事务
Spanner是谷歌的分布式数据库,发表于著名论文Spanner: Google’s Globally-Distributed Database,它创造性的采用了GPS + 原子钟的方式提供TrueTime API来解决时钟问题,去掉了中心化的授时中心。本文将尝试解释Spanner如何利用TrueTime API来解决分布式事务,并提供外部一致性。前置知识:理解linearizability的概念,可参考维基百科. 事务以及分布式事务2PC,可参考《数据库系统实现》或《数据库系统概念》相关章节.转载 2021-03-08 15:49:21 · 969 阅读 · 0 评论 -
Percolator:基于BigTable的分布式事务实现
Google为了解决网页索引的增量处理,以及维护数据表和索引表的一致性问题,基于BigTable实现了一个支持分布式事务的存储系统。这里重点讨论这个系统的分布式事务实现,不讨论percolator中为了支持增量计算而实现的Notifications机制。该系统基于BigTable,支持snapshot isolation隔离级别,这个隔离级别不在ANSI定义的隔离级别范围内。简单来说,就是一个事务看到的是一个stable的数据库的快照。快照隔离相对于可串行化隔离级别的优点是更高的读性能,不需要加锁,MV转载 2021-03-08 12:10:55 · 210 阅读 · 0 评论 -
并发编程--多处理器架构硬件基础介绍(翻译)
最近重读《the art of multiprocessor programming》,从初读时的不知所云,到二读时的不以为然,再到再读时字字珠玑深以为然。由此深知遇到一本书,不是你看见它的时候,也不是你买了它的时候,甚至都不是你读过它的时候,而是你深刻的与它产生了共鸣的时候。于是决定有精力的话会将其逐篇的翻译出来,以供自己进一步的加深理解。另外,个人感觉英语作为一门层次化的结构立体性的语言,其突出重点,并随时可以自然的为其中的任何概念增加注释(从句)的特性使其更加适合技术性文章。这也是为什么很多时候看英文翻译 2021-02-19 21:20:38 · 671 阅读 · 0 评论 -
缓存一致性协议(MESI)
在目前主流的计算机中,cpu执行计算的主要流程如图所示:数据加载的流程如下:将程序和数据从硬盘加载到内存中 将程序和数据从内存加载到缓存中(目前多三级缓存,数据加载顺序:L3->L2->L1) CPU将缓存中的数据加载到寄存器中,并进行运算 CPU会将数据刷新回缓存,并在一定的时间周期之后刷新回内存缓存一致性协议发展背景现在的CPU基本都是多核CPU,服务器更是提供了多CPU的支持,而每个核心也都有自己独立的缓存,当多个核心同时操作多个线程对同一个数据进行更新时,如果核心转载 2021-02-18 11:55:18 · 1382 阅读 · 0 评论 -
Netty-内存管理
通过NIO传输数据时需要一个内存地址,并且在数据传输过程中这个地址不可发生变化。但是,GC为了减少内存碎片会压缩内存,也就是说对象的实际内存地址会发生变化,所以Java就引入了不受GC控制的堆外内存来进行IO操作。那么数据传输就变成了这样但是内存拷贝对性能有可能影响比较大,所以Java中可以绕开堆内存直接操作堆外内存,问题是创建堆外内存的速度比堆内存慢了10到20倍,为了解决这个问题Netty就做了内存池。内存池是一套比较成熟的技术了,Netty的内存池方案借鉴了jemalloc。了解一下其背后转载 2021-01-15 12:02:25 · 230 阅读 · 0 评论