【问题标题】:Migrating MySql to NoSql将 MySql 迁移到 NoSql
【发布时间】:2016-09-17 21:14:08
【问题描述】:

我正在将 mysql 数据库迁移到 noSql 对于用户管理系统,并想知道 是否/如何选择属于 某个年龄段..

a) 我保留了一个名为 UID 的国家/地区,我将其递增 1 每个用户

b) 对于我所做的每个用户:

hset 用户:名称 joe hset 用户:1-99 岁

我将如何检索所有的用户 例如在 20 到 25 之间?

这可能吗?

谢谢

【问题讨论】:

  • 如何查询数据实际上取决于您使用的数据库(或至少是哪种数据库)...
  • 以redis为例

标签: mysql redis nosql


【解决方案1】:

您遗漏了您在哪个系统上执行所需的检索查询,所以我会同时回答这两个问题。

从 mySQL 中检索符合您的条件的用户只需在 SELECT 语句中使用正确的 where 子句即可。

SELECT * FROM user WHERE age BETWEEN 20 AND 25

在 Redis 中,hset sets a key to a value 并在同一键上调用后续 hset 将 用新值替换现有值。由于您正在为每个用户和年龄执行 hset,因此您实际上正在用迁移查询中的下一条记录快速替换 redis 数据存储中的每个值,只留下最后一条记录在 redis 中迁移。

因此,如果您从 mySQL 迁移的最后一条记录是“Joe, age 20”,那么 redis 将仅从 mySQL 存储以下内容,其他所有内容都将丢失:

Key    Value
Name   Joe
Age    20

简而言之,您的检索是不可能的,因为数据没有正确建模;事实上,到目前为止,我想说的是,这种 NoSQL 存储选择不适合您尝试做的事情。

Redis 只设计用于存储键值对;除非源表中实际上只有两列,否则从完整的 mySQL 表迁移到该表几乎没有意义。如果您要缓存来自 mySQL 的频繁访问的数据点或使用 redis 对需要快速更新的单个数据点进行建模,那么您的用例会更有意义。 Redis 可以补充另一个数据存储,它可以用于日志记录,可以用于消息传递,但它不能替代 RDBMS,它也不想替代。

如果您真的希望将 mySQL 替换为 NoSQL 存储,请问问自己为什么要尝试这种迁移,它对您的应用程序有何好处,以及您愿意接受哪些风险和缺点。这些答案将推动您做出决定:如果您需要以表格格式跨多台机器处理大量数据,那么像 Cassandra 这样的 Column 数据存储就可以做到。如果您需要处理半结构化数据,像 Mongo 这样的 Document 数据存储可以支持该需求。如果您需要对关系建模,Neo4j 非常棒。如果您不需要任何这些东西,那么就停在那里并且根本不要迁移。 NoSQL 可能很流行且令人兴奋,但并非所有事情都需要 NoSQL 解决方案,如果需要,您需要特别注意根据您的需求以及您愿意接受的缺点选择正确的数据存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2014-12-09
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多