2015-04-01 73 views
0

在我的客户关系管理系统中,我计划现在能够支持100家企业的规模,但理想情况下这可以扩展到任何规模。MongoDB客户关系管理数据库设计效率

它的成立,现在的方式:

每个企业都有数据 的3个部分,每部分都有1000“项” 的每个项目都有30 - 50“数据块” - 每个数据块都有一个id,它对应的条目,指示它是哪种类型的数据的值以及它所持有的值。

100 * 3 * 1000 * 30 = 9000000条数据。

我通常只会在任何给定的时间拉动100个条目,所以只有3000-5000左右的数据块被拉出,但偶尔一次可能多达1000个条目或更多。

我有收藏业务,部分,条目和数据块。

我以这种方式设置它,因为有些业务将保存不同类型的数据而不是其他数据,而SQL数据库实际上并不适用于此。

样本数据的产生可能是这样的:

  • 通过名称找到一个部分(即业务1有一节叫SECTION1)
  • 找到那款100项
  • 找到30个数据块对于每个条目

这会导致101找到呼叫。我也可以对这些条目执行查找调用,然后使用具有100或键/值对的where数组查找调用数据,这会在其条目ID是100或键/值之一时抽取100个数据条目对。

这是一个可扩展的数据库设计吗?有更好的方法我应该这样做吗?

回答

1

将所有相关数据放在不同的集合中几乎肯定不是一个好选择。我会提醒你的是,mongodb没有设计任何连接,所以你将有一段时间使用条目和部分集合来收集数据块。因为你的规格非常模糊(我不知道段落,条目或数据块代表什么),所以很难说如何设计它。但对我来说,也许有2个收藏 - 1个为企业,1个为数据块。然后只需在数据块文档中将条目和节标识作为字段。

+0

查看我的编辑更清晰一点。我认为这将有效地和你的建议一样高效。 – maxhud 2015-04-01 17:34:21

+0

大概你会想要返回一些部分的所有数据,是吗?所以它不会是101找到电话,它会是1找到调用来获取该部分,1找到调用获得100个条目,然后1找到获得30 * 100的数据片。但为什么你想要为数据库中的中央查询执行3个表连接?如果你想这样做,不要使用mongodb,使用SQL数据库连接,因为你在这里模拟连接 – jtmarmon 2015-04-01 17:50:45

+0

连接看起来效率很高,特别是如果我只是做一对夫妇而不是100.由于这个原因,我没有使用SQL数据库:每个数据块都有一个“值”字段。该值可以存储任何类型的数据,并且该数据可以在mongodb中排序。如果是sql,我无法做到这一点。 – maxhud 2015-04-01 17:54:16