SQL迁移到Key Value和MapReduce



我有一个SQL数据库,有两个表,像这样:

Users
 Id (PK)
 Name
Orders
 Id (PK)
 UserId (FK - User.Id)
 Amount

我想将其移动到NoSQL(即MongoDb)键值存储中,以避免连接(在非常大的结果集上)。

  1. 这个结构是否有意义,因为是要移动到KV数据库?如果没有,我是否应该添加另一个表,如User_Orders与用户和订单相关?

我有一个屏幕,在网格中显示订单,但我还想显示用户名。在SQL中,我将使用连接从数据库中提取。

  1. 除了每个订单查询一次数据库之外,在NoSQL中是否有类似的(没有连接)?UserId获取相关用户?如果没有,我如何申请(分布式?)假设我的体系结构允许我运行多个前端和应用服务器,Map-Reduce在这个实例中实现相同的目标?

谢谢!

从关系数据库到NoSQL数据库的一个大变化是非规范化。根据用户名在系统中更改的频率,您可以简单地将用户名添加到orders 集合(关系术语中的)。因此,您的orders集合模式看起来像:

{"userId":"abc123", "userName": "Some Name", "orderId":"someorderId","amount":153.23}

您可以使用简单的find()查询来获取订单和用户的数据。如果名称要更改,它将是一个多文档更新,但如果这种情况不经常发生,那就没有那么糟糕了。对于偶尔的更新,非规范化是好的,因为它有利于读取。同样,这不是一个经验法则,但它完全取决于您的用例和设计,以考虑读:写比率。

如果用户名经常更改,并且您不希望反规范化,那么您可以始终缓存userId到userName映射,并使用适当的TTL,并在应用程序层查找ID ->名称,而不是使用数据库来强加业务约束。

你不需要map-reduce只是提取订单和用户-除非你正在做大量的数据聚合。

相关内容

  • 没有找到相关文章

最新更新