【发布时间】:2013-01-30 15:22:42
【问题描述】:
我使用 mongodb 作为数据库存储。
我的网络应用必须收集用户响应。
用户响应是 mongodb 中的一个文档(或 sql 中的一行)。一个文档的长度大约是10~200。
用户响应被分类(仅归类)。对于每个类别,用户响应的数量在 100~5000 之间。如果两个文档属于同一类别,则具有相同的长度。 (或者它们在 sql 中有相同的列)
可以根据管理员的要求动态创建/删除类别。
目前,我的数据结构是
category collection
{_id, 'name' : 'c1', 'somevalue' : '123'}
{_id, 'name' : 'c2', 'somevalue' : '23'}
{_id, 'name' : 'c3', 'somevalue' : '143'}
{_id, 'name' : 'c4', 'somevalue' : '153'}
...
'c1' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
...
'c2' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
...
'c3' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
...
'cN' collection
{ userresponse1 }
{ userresponse2 }
{ userresponse3 }
..
这是一个明智的决定吗?我担心通过为每个类别分配一个集合而出现问题的可能性。如果我有很多集合,会有一些性能问题吗?我应该合并我的收藏并给用户响应一些标识符吗?
【问题讨论】:
-
这个已经回答了很多次了,通常MongoDB擅长垂直扩展。横向扩展许多集合并没有那么好。它可以扩展许多数据库,但对于这种情况来说这可能是多余的
-
哎呀,当我说垂直时,我指的是水平,当我说水平时,我指的是垂直。该死的词
-
@sammaye 你能清楚地告诉我这是怎么回事吗?
growing vertically表示few big collections和growing horizontally表示many (relatively) small collections,而mongodb擅长拥有many small collections,对吧? -
没有水平扩展是有几个集合在集群中的许多分片(服务器)上水平扩展。
-
不过,再次阅读您的问题,这是否不好取决于您打算拥有多少类别。我的意思是你不能有这么多的类别,对吧?默认命名空间允许大约 12k 个集合以及每个集合的少量索引。但是,在主服务器上拥有如此多的索引可能会导致性能问题,因为从长远来看,您可以在多个服务器之间分片索引,从而为您节省很多麻烦。
标签: mongodb