将数据集映射到NoSql(MongoDB)集合

时间:2013-09-27 06:35:46

标签: mongodb database nosql

我有什么?

我有'n'部门的数据 每个部门都有1000多个数据集 每个数据集都有超过10,000个csv文件(大小超过10MB),每个文件都有不同的模式。

这些数据在未来会变得更多

我想做什么?

我想将此数据映射到mongodb

我使用了什么方法?

我无法将每个数据集映射到mongo中的文档,因为它的限制为4-16MB

我不能为每个数据集创建集合,因为最大集合数也是有限的(< 24000)

所以最后我想为每个部门创建集合,在该集合中为属于该部门的csv文件中的每个记录创建一个文档。

我想告诉你:

如果我们将每条记录映射到文档,

会出现性能问题吗?

文件数量是否有最大限制?

我可以做任何其他设计吗?

2 个答案:

答案 0 :(得分:0)

  如果我们将每条记录映射到文档,

会出现性能问题吗?

这完全取决于你如何搜索它们。当您使用大量仅影响一个文档的查询时,它可能更快。当更高的文档粒度导致大量跨文档查询时,它会变慢,因为MongoDB本身不能这样做。

  

文件数量是否有最大限制?

没有

  

我可以做任何其他设计吗?

可能,但这取决于您想要查询数据的方式。如果您满意将文件视为BLOB,而BLOB整体检索但未在数据库级别进行搜索或分析,则可以考虑将其存储在GridFS上。它是一种在MongoDB上存储大于16MB的文件的方法。

总的来说,MongoDB数据库设计并不太依赖于您拥有的数据量和数量,而是取决于您希望如何使用它。

答案 1 :(得分:0)

如果我们将每条记录映射到文档,

会出现性能问题吗?

将每个记录映射到mongodb中的文档并不是一个糟糕的设计。您可以在mongodb网站上查看常见问题解答 http://docs.mongodb.org/manual/faq/fundamentals/#do-mongodb-databases-have-tables。 它说,

  

... MongoDB数据库代替表,将其数据存储在集合中,   这是RDBMS表的粗略等价物。一个集合持有一个   或更多文档,对应于记录或行中的行   关系数据库表....

随着BSON文档大小(16MB)的限制,文档嵌套级别的最大限制为100

http://docs.mongodb.org/manual/reference/limits/#BSON文件大小

  

... BSON文档的嵌套深度在版本2.2中更改。

     

MongoDB为BSON文档支持不超过100级的嵌套...

因此,最好为每条记录使用一个文档

文件数量是否有最大限制?

不,它在mongoDB的参考手册中提到

  

...更改了上限集合中的最大文档数   版   2.4。

     

如果为封顶集合指定最大文档数   使用max参数创建,限制必须小于232   文档。如果您未指定最大文档数   创建一个上限集合,对数量没有限制   文件 ......

我可以做任何其他设计吗?

如果您的文档太大,那么您可以考虑在应用程序级别进行文档分区。但它在应用层的计算要求很高。