分类目录归档:官网翻译文章

使用模式构建:计算模式(The Computed Pattern)

我们已经在使用模式构建系列研究了各种优化存储数据的方法。现在,我们从另一个角度来看看模式设计。通常,仅仅存储数据并使其可用还不够。当我们可以从数据中计算出值时,数据会变得有用的多。最新Amazon Alexa的总销售收入是多少?有多少观众看了这部最新的大片?这类问题可以从数据库中存储的数据那里得到答[......]

阅读全文

使用模式构建:异常值模式(The Outlier Pattern)

到目前为止,在《使用模式构建》系列中,我们已经研究了多态模式属性模式桶模式。其中,尽管文档的模式略有不同,但从应用程序和查询的角度来看,文档的结构基本上是一致的。然而,如果情况并非如此会怎么样?当有数据不属于“正常”模式时会发生什么?如果有异常值怎么办?

假设你正在搭建一个出售图书的电子商务网[......]

阅读全文

可靠的因果保证

传统的数据库由于服务于单个节点,因此自然地为读写操作提供了顺序保证,这称为“因果一致性(causal consistency)”。分布式系统同样可以提供这些保证,但要做到这一点,就必须对所有节点上的相关事件进行协调和排序,并对某些操作完成的速度进行限制。虽然在所有数据顺序能得到保证时因果一致性很容易[......]

阅读全文

使用模式构建:桶模式(The Bucket Pattern)

在本期《使用模式构建》中,我们将介绍桶模式。这种模式在处理物联网(IOT)、实时分析或通用时间序列数据时特别有效。通过将数据放在一起,我们可以更容易地将数据组织成特定的组,提高发现历史趋势或提供未来预测的能力,同时还能对存储进行优化。

桶模式

随着数据在一段时间内持续流入(时间序列数据),我们可[......]

阅读全文

使用模式构建:属性模式(The Attribute Pattern)

欢迎回到MongoDB模式设计系列。上一次我们研究了多态模式,它涵盖了集合中所有文档具有相似但不相同结构的情况。在本文中,我们将了解一下属性模式。属性模式特别适用于以下情况:

  • 我们有一些大文档,它们有很多相似的字段,而这些字段的一个子集具有共同的特征,我们希望对该子集字段进行排序或查询;
  • 我们需[......]

阅读全文

使用模式构建:多态模式(The Polymorphic Pattern)

当涉及MongoDB时,一个经常被问到的问题是“我如何在MongoDB中为我的应用程序构造模式(schema)?”老实说,这要看情况而定。你的应用程序读操作比写操作多吗?从数据库中读取时需要将哪些数据放在一起?有哪些性能因素需要考虑?文档有多大?它们今后会变成多大?你预计数据会如何增长和扩展?

所[......]

阅读全文

扩展你的复制集:MongoDB 4.0中从节点的非阻塞读操作

MongoDB 4.0增加了一个能力,在副本处理写操作的同时可以由从节点(secondary)读取数据。为了理解这个的重要性,让我们看看4.0版本之前从节点是如何处理的。

背景

从一开始,MongoDB就是这样设计的:当主节点上有一系列的写入操作时,每个从节点必须以相同的顺序体现出这些操作。如果[......]

阅读全文

打破WiredTiger的Logjam(下篇):无等待解决方案

本文的上篇探讨了WiredTiger中WAL的原始算法,该算法用于合并写操作以达到最小化I/O的目的。它没有使用耗时的锁,而是分两个阶段使用CAS原子操作来实现。只要每个核运行的线程不太多,这个算法就可以非常好地工作。但当线程数超过该限制时,它为了避免锁而依赖于忙等待的机制会导致logjam——鉴于[......]

阅读全文