MongoDB全局事务Beta版宣布

就在12个多月前,我们宣布将多文档ACID事务引入MongoDB。几周后,我们发布了第一个beta测试版。之后这一特性在经过了数千用户的检验后进入了GA(General Availability)阶段,并作为MongoDB 4.0的一部分于2018年6月发布。

现在,我们非常高兴地宣布我们将引入全局事务作为下一个阶段,将多文档ACID保证从副本集扩展到分片集群。由此,通过对跨越大规模、全球分布的[......]

阅读全文

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

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

每次在请求时运行这些计算都会是一个极其消耗资源的过程,特别是在大型数据集上。[......]

阅读全文

一个数组查询引发的坑

背景

中午12点半,接到了线上MongoDB 数据库异常的告警通报:

“CPU不间断飙升到百分百,业务也相应出现了抖动现象。”

通过排查数据库主节点的日志,发现了这样的一个慢语句:

2019-03-07T10:56:43.470+0000 I COMMAND  [conn2544772] command nlp.ApplicationDevice appName: "nlp" comman[......]

阅读全文

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

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

假设你正在搭建一个出售图书的电子商务网站,你可能会想查询“有哪些人购买了某本特定的书”。这对于一个可以向顾客展示他感兴趣书籍的推荐系统来说[......]

阅读全文

可靠的因果保证

传统的数据库由于服务于单个节点,因此自然地为读写操作提供了顺序保证,这称为“因果一致性(causal consistency)”。分布式系统同样可以提供这些保证,但要做到这一点,就必须对所有节点上的相关事件进行协调和排序,并对某些操作完成的速度进行限制。虽然在所有数据顺序能得到保证时因果一致性很容易理解(模拟一个纵向扩展的数据库,即使系统遇到类似节点崩溃或网络分区等故障),但系统依旧需要在合理的一[......]

阅读全文

成功案例 I Metlife 大都会人寿的经验分享

MongoDB帮助我们用短短90天内交付了客户360项目。对大都会人寿,这是真正突破,保险业的开创性突破。它树立了我们所期望的公司榜样。——John Bungert,大都会人寿高级架构师

2011 年,保险巨头大都会人寿 (MetLife) 的新高管团队意识到,他们必须重审对客户需求的认识。因为当今的消费者与世界高度相连,掌握先进的数字技术和丰富的信息。他们毫无耐心更无忠诚度。

大都会人寿想要[......]

阅读全文

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

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

桶模式

随着数据在一段时间内持续流入(时间序列数据),我们可能倾向于将每个测量值存储在自己的文档中。然而,这种倾向是一种非常偏向于关系型数据处理的方式。如果我们[......]

阅读全文

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

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

  • 我们有一些大文档,它们有很多相似的字段,而这些字段的一个子集具有共同的特征,我们希望对该子集字段进行排序或查询;
  • 我们需要排序的字段只能在一小部分文档中找到;
  • 上述两个条件均满足。

出于性能原因考虑,为了优化搜索我们[......]

阅读全文

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

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

所有这些以及更多的问题,都涉及到如何在MongoDB中设计数据库模式(schema)。有人说Mongo[......]

阅读全文