Mongodb 单一数据库 vs 每个客户端的集合 vs 每个客户端的数据库

标签 mongodb lithium

我想使用 mongodb 和 lithium 构建一个网络服务。什么更好:

  • 将所有客户的数据存储在一个集合中(例如多个客户的所有交易文档在一个集合交易中)

  • 创建多个集合,例如transactions_client1、transactions_client2 等

  • 每个客户端一个 db

系统必须是可扩展的并且必须易于部署

最佳答案

要提供方向,您必须确切地了解更多您想要实现的目标。

但是,我会排除选项 2(多个集合),因为我没有真正看到这种方法的任何优点:您必须在运行时确定集合名称,编写起来有点棘手您的查询,并且您可以拥有的集合数量有硬性限制(大约 150 万个集合,2GB namespace file)

选项 1 有助于隔离客户端并可能提高安全性,但在选择数据库时仍然存在编程错误的风险。但是,隔离该代码很容易。

这两个选项都有一个缺点,即您无法跨所有集合进行查询。但是,您总是希望能够访问一些本质上在所有客户端之间共享的集合(例如日志、统计信息等),因此您需要承担分离这些的额外负担。

这就是为什么我通常选择选项 1 的原因。

关于Mongodb 单一数据库 vs 每个客户端的集合 vs 每个客户端的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307676/

相关文章:

php - 模型属性是动态的

command-line - Lithium:如何通过命令行访问操作?

frameworks - 锂远期请求

c# - Web Api 返回扩展键值对象而不是原始 JSON 对象

javascript - 如何从 ref 对象插入项目

php - Lithium PHP 框架 - 播种数据库?

python - 使用 PyMongo 的 MongoDB Atlas 的 ServerTimeoutError(运行设置代码)

java - Mongo Java 数组

mongodb - Mongo 对象 ID : Safe to use in the wild?