在MongoDB中实现的可能方案

时间:2013-08-27 15:38:48

标签: mongodb

我是使用nosql(MongoDB)的新手。所以我有这个计划: http://prntscr.com/1fpycv

仍有可能增长一点,我被要求在MongoDB中实施。

但这种关系很紧密。

在MongoDB中实现它是可行的还是可行的,或者最好的方法是SQL?

有人可以帮帮我吗?建议? 谢谢

2 个答案:

答案 0 :(得分:1)

你想要做的是找到一些“合在一起的东西”并将它们分组到Mongo中的一个文档中。这是一种权衡,没有一个正确的答案。

假设您正在存储患者在医生办公室填写的表格。

选项1:您可以将所有内容存储在单个文档中。如果系统不需要“绑定”患者的其他记录,这是一个很好的选择。例如,您正在进行一项关于患者习惯的简短调查,但没有将其列入他们的医疗记录,并且不会随着时间的推移跟踪特定患者。对于像Mongo这样的文档存储,此选项是“最简单的”。它也是性能最高的,因为每个表单只需要一次磁盘读取。但是,如果患者填写了许多表格,那么您将浪费大量磁盘,在表格的每个副本上存储患者姓名。

选项2:您可以将关于患者的数据“中断”到“患者”集合中,并且只将patient_id存储在表单对象上。这是关系中最简单的,但在Mongo中它要求您编写额外的代码。 (您的ORM可能会在这里提供帮助)。好消息是避免重复患者记录更容易。但现在速度较慢(因为每次查看表单时都必须进行客户端数据库连接)。

选项3:您可以将选项1和选项2结合起来:将患者存储在患者集合中,但也要将其数据保存在表单中。这样,例如,您可以说“患者的地址是X,但在填写表格时,他们的地址是Y”。缺点是需要更多存储空间。

选项4:如果数量有限(比如诊所只能看到10名患者),您可以在程序中对其进行“硬编码”(即从配置中加载)文件,或在启动时从Patient集合加载它们。这样,在显示患者时,您不会进行客户端数据库连接。

对表格中的每个“事物”重复上述思考练习(医生,药物,患者地址等)如果您发现需要大量的收藏品,那么您最好使用关系数据库。如果你发现很容易保持低收集数量,那么Mongo可能是一个不错的选择。

答案 1 :(得分:0)

建议嵌入你希望数量较少的相关实体,请记住,mongodb对象不能占用超过16mb。

我认为mongo是灵活数据“方案”的完美工具

http://docs.mongodb.org/manual/core/data-modeling/

但是,如果您对无关系数据库感到不舒服,并且您的应用程序非常重要,我就不会进行实验