我们的应用处理许多数据,这些数据的变动速度非常快。我们的主数据库(MySQL)根本无法跟上,因此我们在Redis中存储了很多“当前状态”数据。
现在,我们使用JSON对对象进行反序列化并存储整个对象。这导致了几个问题,因此我们将切换为单独存储每个字段。用于管理所有这些字段的代码很快就会变得棘手,因此我正在考虑为Redis构建通用ORM。其中一些已经存在,但没有我需要的所有功能(例如,具有管道的事务)和锁。
这是一个可怕的主意吗?我只是在构建一种我不知道的其他地方已经存在的产品吗?
回答:
1.为了避免维护两个不同存储之间的数据一致性的巨大痛苦。看一下Apache Ignite数据网格。使用它可以获得以下好处:
透明缓存
访问数据作为键值存储
使用分布式SQL查询访问与关系数据库相同的数据
全面的交易支持
在存储和性能方面接近线性水平可扩展性
每个“表”(Ignite术语为“缓存”)的可调冗余和一致性特征
它还提供其他服务,例如队列,发布订阅,分布式计算,内置文件系统以及更多有用的东西。
2. 我认为为该用例构建的MongoDB与像Marshal.ts这样的高性能序列化器/ ORM结合起来最适合这里。尽管Redis可用于许多用例,但我认为这在性能,可维护性和其他功能(例如查询数据)方面不会胜过MongoDB。
3.如果要使用Redis作为文档(对象)的存储引擎,为什么不使用像mongoDB这样的noSQL文档数据库并使用内存中的引擎(如果使用ssd的速度不足以仅查找键),并使用该工具经过良好测试的数据库。
我认为最好是找到合适的工具而不是修改工具,而Redis是一个出色的键/值数据库,但是如果您要扩展功能,也许是更合适的工具。