使用模式构建:预分配模式(The Preallocation Pattern)

MongoDB最明显的优势之一就是文档数据模型。它在模式设计和开发周期中均提供了很大的灵活性。用MongoDB文档可以很容易地处理那些不知道之后会需要哪些字段的场景。然而,有些时候当结构是已知的,并且能够被填充或扩充时,会使设计简单得多。这就是我们可以使用预分配模式的地方。

为避免性能问题,内存通常以块的形式进行分配。在MongoDB的早期(MongoDB 3.2版之前),当它使用MMAPv1存[......]

阅读全文

使用模式构建:树形模式(The Tree Pattern)

到目前为止,我们讨论的许多设计模式都强调省去JOIN操作的时间是有好处的。那些会被一起访问的数据也应该存储在一起,即便导致了一些数据重复也是可以的。像扩展引用(Extended Reference)这样的设计模式就是一个很好的例子。但是,如果要联接的数据是分层的呢?例如,你想找出从某个员工到CEO的汇报路径?MongoDB提供了$graphlookup运算符,以图的方式去浏览数据,这可能是一种解决[......]

阅读全文

使用模式构建:近似值模式(The Approximation Pattern)

假设现在有一个相当规模的城市,大约有3.9万人。人口的确切数字是相当不稳定的,人们会搬入搬出、有婴儿会出生、有人会死亡。我们也许要花上整天的时间来得到每天确切的居民数量。但在大多数情况下,39,000这个数字已经“足够好”了。同样,在许多我们开发的应用程序中,知道“足够好”程度的数字就可以了。如果一个“足够好”的数字就够了,那么这就是一个应用近似值模式的好机会。

近似值模式

在所需要的计算非常[......]

阅读全文

海量数据的分页怎么破?

一、背景

分页应该是极为常见的数据展现方式了,一般在数据集较大而无法在单个页面中呈现时会采用分页的方法。
各种前端UI组件在实现上也都会支持分页的功能,而数据交互呈现所相应的后端系统、数据库都对数据查询的分页提供了良好的支持。
以几个流行的数据库为例:

**查询表 t_data 第 2 页的数据(假定每页 5 条) **

  • MySQL 的做法:
select * from t_data[......]

阅读全文

MongoDB 3.6:给你更简单的副本集连接方式

如果近期你有登录MongoDB Atlas,入门级是免费的, 你可能会注意到在3.6 版本下连接字符串的一个新的语法。
Connection Url1

MongoDB Seed列表

mongodb+srv 语法是怎么定义的哪?
在MongoDB 3.6, 我们引入了一个seed列表的概念, 它由DNS记录来指定, 尤其是SRV和TXT记录。你会想起客户端使用MongoDB副本集进行连接的时候, 必须指定至少一个副本集成员[......]

阅读全文

为mongos构建一个异步网络层

许多人以分片集群的方式运行MongoDB服务器。 在这种配置下, mongos位于用户程序和分片数据之间, 用户连接mongos并给它发送查询, mongos将那些查询路由到一个或者多个分片上来完成查询动作。

在大多数情况下, mongos可以将某个查询精确定位到单一的分片上, 然而, 一些查询需要“分散-集合”的路由, 换句话说, mongos不得不将查询发送到所有的分片上,等待它们的响应,并[......]

阅读全文

使用模式构建:扩展引用模式(The Extended Reference Pattern)

贯穿整个《使用模式构建》,我希望你已经了解到一件事,即模式是什么样子取决于数据的访问方式。如果我们有许多相似的字段,属性模式可能是一个很好的选择。为了适配一小部分数据的访问会极大地改变我们的应用程序吗?也许异常值模式是值得考虑的。还有一些模式,例如子集模式,会引用额外的集合,并依赖JOIN操作将每个数据块重新组合在一起。如果需要大量的JOIN操作来聚集那些需要频繁访问的数据,这时要怎么办呢?这就是[......]

阅读全文