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



我有什么?

我有'n'部门的数据每个部门都有 1000 多个数据集每个数据集都有超过 10,000 个 CSV 文件(大小大于 10MB(,每个文件具有不同的架构。

这些数据在未来甚至会增长更多

我想做什么?

我想将这些数据映射到 mongodb

我使用了哪些方法?

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

我无法为每个数据集创建集合,因为最大集合数量也有限 (<24000(

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

我想从你那里知道:

如果我们将每条记录映射到文档,是否会有性能问题?

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

我还能做其他设计吗?

如果我们将每条记录映射到文档,会出现性能问题吗?

将每条记录映射到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支持不超过100级的BSON文档嵌套...

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

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

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

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

如果为有上限的集合指定最大文档数 使用 max 参数创建,限制必须小于 232 文件。如果未指定最大文档数,则在以下情况下 创建上限集合,对数量没有限制 文件...

我还能做其他设计吗?

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

如果我们将每条记录映射到文档,是否会有性能问题?

这完全取决于您如何搜索它们。当您使用大量仅影响一个文档的查询时,这种方式可能会更快。当较高的文档粒度导致大量跨文档查询时,它会变慢,因为MongoDB自己无法做到这一点。

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

不。

我还能做其他设计吗?

也许吧,但这取决于您希望如何查询数据。当您满足于将文件视为一个整体检索但不在数据库级别搜索或分析的 BLOB 时,您可以考虑将它们存储在 GridFS 上。这是一种在MongoDB上存储大于16MB的文件的方法。

一般来说,MongoDB数据库设计并不依赖于你拥有什么和多少数据,而是取决于你想如何使用它。

最新更新