我想使用 mongodb 和 lithium 构建一个网络服务。什么更好:
将所有客户的数据存储在一个集合中(例如多个客户的所有交易文档在一个集合交易中)
创建多个集合,例如transactions_client1、transactions_client2 等
每个客户端一个 db
系统必须是可扩展的并且必须易于部署
最佳答案
要提供方向,您必须确切地了解更多您想要实现的目标。
但是,我会排除选项 2(多个集合),因为我没有真正看到这种方法的任何优点:您必须在运行时确定集合名称,编写起来有点棘手您的查询,并且您可以拥有的集合数量有硬性限制(大约 150 万个集合,2GB namespace file)
选项 1 有助于隔离客户端并可能提高安全性,但在选择数据库时仍然存在编程错误的风险。但是,隔离该代码很容易。
这两个选项都有一个缺点,即您无法跨所有集合进行查询。但是,您总是希望能够访问一些本质上在所有客户端之间共享的集合(例如日志、统计信息等),因此您需要承担分离这些的额外负担。
这就是为什么我通常选择选项 1 的原因。
关于Mongodb 单一数据库 vs 每个客户端的集合 vs 每个客户端的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307676/