微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将mysql查找表转换为mongodb的最佳做法是什么

我正在将数据库mysql转换为mongdb.我的问题是关于查找表.假设我有一个可以有多个类别的食谱.在MysqL中,这是通过配方和类别表之间的多对多查找来实现的.在mongodb中,我可以简单地使用包含一系列类别的类别字段的食谱集合.文本实际上存储在该字段中,未被引用,如下所示:

recipe: {
  _id: xxxxx,
  title: "a recipe title",
  categories: ['catone', 'cattwo']
}

那么,这是最佳做法吗?我更喜欢这种方法,因为它似乎比单独的集合更容易维护并引用它.但我看到两个缺点.一,如果类别名称发生变化,则必须更新所有记录,而不是像在MysqL中那样更新单个查找记录.其次,在接口上的复选框列表中获取可用类别列表似乎效率低下.

我知道很多其他人不得不处理这个问题,所以我只是想找到最佳实践.

解决方法:

你说的是对的.只要类别名称发生更改,您就必须更新(查找和修改)嵌入的类别.这是你的电话.你必须根据事实来决定

>生产中的类别名称将改变多少次
>你有多少个类别

根据您的情况,在生产中我认为类别名称不会经常更改.它应该很少发生,所以我建议你嵌入它并有机制来更新它,但不是直接嵌入类别,我会嵌入Id如下.否则,当您想要更新并且必须在订单更新时进行字符串搜索时,这将是性能问题.如果你有id,你也可以有这个索引.

所以就这样吧

recipe: {
    _id: xxxxx,
    title: "a recipe title",
    categories: [{ id: 1,'catone'}, {id:2,'cattwo'}]
}

此外,当您需要更新数百或数十亿条记录时,您必须了解如何处理.在某些情况下,您必须更新数百万条记录,而不仅仅是在一个集合中,而是在多个集合中.如果你有这种情况,那么你必须使用单独的更新服务或类似的东西来处理它.因为如果你试图同步,它将花费很多时间,你不希望你的用户等待这一切完成.

还记得嵌入式阵列不能很长,就像拥有数百/数千个项目一样. Mongo仍然允许它,但你会遇到问题.还需要考虑的另一个问题是,在创建数组之后是否会将其他类别添加到数组中.如果在更新中添加了很多其他项目,如果它会有很多,那么很多人都想了解Padding Factor.希望这可以帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐