kid*_*rax 5 mysql schema mongodb
我正在将数据库从mysql转换为mongdb。我的问题是关于查找表。假设我有一个可以包含多个类别的食谱。在mysql中,这是通过在配方和类别表之间进行多对多查找来实现的。在mongodb中,我可以简单地拥有一个食谱集合,其中包含一个包含一个类别数组的类别字段。文本实际上存储在该字段中,未引用,如下所示:
recipe: {
_id: xxxxx,
title: "a recipe title",
categories: ['catone', 'cattwo']
}
Run Code Online (Sandbox Code Playgroud)
那么,这是最佳实践吗?我更喜欢这种方法,因为它似乎比单独的集合和引用起来更容易维护。但是我看到两个缺点。第一,如果类别名称更改,则必须更新所有记录,而不是像mysql中那样仅更新单个查找记录。其次,获取可用类别列表以用于界面上的复选框列表似乎效率不高。
我知道许多其他人必须处理此问题,因此我只是在尝试寻找被认为是最佳实践的方法。
你说的是对的。每当类别名称更改时,您都必须更新(查找和修改)嵌入的类别。是你的电话。您必须根据以下事实做出决定
根据您的情况,在生产中我认为类别名称不会频繁更改。它应该很少发生,因此我建议您嵌入它并具有更新它的机制,但是与其直接嵌入类别,不如下面嵌入Id。否则,当您要更新并且必须进行字符串搜索以进行更新时,这将是性能问题。如果您有ID,则也可以对此进行索引。
所以像这样
recipe: {
_id: xxxxx,
title: "a recipe title",
categories: [{ id: 1,'catone'}, {id:2,'cattwo'}]
}
Run Code Online (Sandbox Code Playgroud)
另外,您还必须查看要更新几百万或数十亿条记录时如何处理。在某些情况下,您不仅要更新一个集合中的多个记录,还要更新多个集合中的数百万个记录。如果遇到这种情况,则必须使用单独的更新服务或类似的服务来处理。因为如果您尝试同步执行,将花费大量时间,并且您不希望用户等待所有这些完成。
还请记住,嵌入式阵列不能像拥有数百/数千个项目那样太长。Mongo仍然会允许它,但是您将面临问题。需要考虑的另一件事是在创建数组后是否将其他类别添加到数组。如果可以在更新中添加这么多其他项,那么如果要添加很多项,那么您很多人都想阅读有关填充因子的信息。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |