您如何混合 SQL DB 与键值存储(即 Redis)

Posted

技术标签:

【中文标题】您如何混合 SQL DB 与键值存储(即 Redis)【英文标题】:How do you mix SQL DB vs. Key-Value store (i.e. Redis) 【发布时间】:2011-01-13 08:45:47 【问题描述】:

我正在审查我的代码并意识到我花费了大量时间

    从数据库中获取行, 格式化为 XML, AJAX GET 到浏览器,然后 转换回哈希 javascript 对象作为我的本地数据存储。

在更新时,我必须反转这个过程(除了使用 POST 而不是 XML。)

刚开始研究 Redis,我想我可以节省大量时间将对象保存在服务器上的键值存储中,并且只需使用 JSON 直接传输到 JS 客户端。但我虚弱的头脑无法预料离开 SQL DB 会放弃什么(即我害怕放弃 GROUP BY/HAVING 查询)

对于我的数据,我有:

多对多关系,即 obj-tags、obj-groups 等。 通过组合查询对象,即 WHERE tag IN ('a', 'b','c') AND group in ('x','y') 自连接,即每个对象的所有标签 WHERE tag='a' (sql group_concat()) 很多外连接,即OUTER JOIN rating ON o.id = rating.obj_id 和提要,这似乎是 REDIS 的强项

您如何成功地混合键值和 SQL 数据库?

例如,使用 SQL RANGE 查询(即 WHERE obj.id IN (1,4,6,7,8,34,876,9879 ,567,345, ...),反之亦然?

欢迎提出想法/建议。

【问题讨论】:

【参考方案1】:

您可能想看看MongoDB。它适用于 JSON 样式的对象,并带有像索引和查询这样的 SQL。当您需要简单的查找而不是复杂的查询时,Redis 更适合存储列表和集合等数据结构。

【讨论】:

【参考方案2】:

现在实际问题更加明确(即您花费大量时间编写重复的转换代码以从一层/表示移动到下一层)也许您可以考虑编写(或搜索)一些自动化的东西,也许?

Google 会返回大量“将表格转换为 XML”(反之亦然)的结果,这有帮助吗?直接从表到键/值对的东西会更好吗?您是否尝试过以普遍的方式解决这个问题?

【讨论】:

【参考方案3】:

当您说“我花费大量时间”时,您是指大量的开发时间,还是指计算时间?

就我个人而言,我对将 RDBMS 与非 RDBMS 解决方案混合使用持谨慎态度,因为当两种不同的范式发生冲突时,这可能会产生问题。

【讨论】:

抱歉,我的意思是开发时间。我想我的问题可以简化为“你能把它们混合起来吗?”还是你必须“全力以赴”?一票投“全押”,但有人试过吗?

以上是关于您如何混合 SQL DB 与键值存储(即 Redis)的主要内容,如果未能解决你的问题,请参考以下文章

如何修复错误:此类与键 tableView 的键值编码不兼容。 [复制]

如何使用behave context.table与键值表?

此类与键 scrollView 的键值编码不兼容

未捕获的异常 'NSUnknownKeyException' - 此类与键 buttonPressed 的键值编码不兼容

为啥会出现错误:类与键名的键值编码不兼容?

该类与键 tableView 的键值编码不兼容