我正在将mysql数据库迁移到noSql 对于用户管理系统,并想知道 是否/如何选择落入的用户 某个年龄段的人..
a)我保留一个名为UID的国家,我增加1 为每个用户
b)对于我所做的每个用户:
hset user:name joe hset用户:1-99岁
我将如何检索所有用户 例如20到25之间?
这可能吗?
由于
答案 0 :(得分:4)
您遗漏了正在执行所需检索查询的系统,因此我将回答这两个问题。
从mySQL中检索符合条件的用户只需要在SELECT语句中使用正确的where子句。
SELECT * FROM user WHERE age BETWEEN 20 AND 25
在Redis中,hset sets a key to a value并在同一个键上调用后续hsets将用新值替换现有值。由于您正在为每个用户和年龄执行hsets,因此您实际上正在使用迁移查询中的下一条记录快速替换redis数据存储区中的每个值,只留下最终记录以redis形式迁移。
因此,如果从mySQL迁移的最终记录是“Joe,20岁”,redis将只从mySQL中存储以下内容,其他所有内容都将丢失:
Key Value
Name Joe
Age 20
简而言之,您无法检索,因为数据未正确建模;事实上,我到目前为止说这种NoSQL商店的选择并不适合你试图做的事情。
Redis仅用于存储键值对;从完整的mySQL表迁移到那个将没有多大意义,除非源表中只有两列。如果您从mySQL缓存频繁访问的数据点或使用redis建模需要快速更新的单个数据点,那么您的用例会更有意义。 Redis可以补充另一个数据存储区,它可以用于日志记录,它可以用于消息传递,但它不能取代RDBMS,也不能取代它。
如果您真的希望用NoSQL商店替换mySQL,请问问自己为什么要尝试迁移,它如何使您的应用程序受益,以及您愿意接受哪些风险和弊端。这些答案将推动您做出决定:如果您需要以表格格式跨多台计算机处理大量数据,则可以使用像Cassandra这样的Column数据存储区。如果您需要处理半结构化数据,像Mongo这样的Document数据存储区支持这种需求。如果你需要建立关系模型,Neo4j很棒。如果你不需要任何这些东西,那就停在那里,根本不要迁移。 NoSQL可能是时髦且令人兴奋的,但并非所有东西都需要NoSQL解决方案,如果确实如此,您需要特别注意根据您的需要选择正确的数据存储,以及您愿意接受的缺点。