如何混合使用SQL数据库和键值存储(如Redis)?

3

我正在回顾我的代码并意识到我花费了大量时间:

  1. 从数据库中取出行,
  2. 格式化为XML,
  3. AJAX GET传输到浏览器,然后
  4. 将其转换回哈希的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
  • 以及feeds,在REDIS中似乎是一个强项

如何成功地混合键值和SQL DB?

例如,从REDIS集合中连接大量obj.Ids与使用SQL RANGE查询的SQL数据(即WHERE obj.id IN (1,4,6,7,8,34,876,9879,567,345,...),或者反之亦然?

欢迎提出想法/建议。

3个回答

4

您可能想要查看MongoDB。它使用JSON风格的对象,并带有类似于SQL的索引和查询功能。当您想要简单查找而不是复杂查询时,Redis更适合存储数据结构,例如列表和集合。


2

现在问题更加明确了(即您花费大量时间编写重复的转换代码以从一层/表示转移到另一层),也许您可以考虑编写(或搜索)自动化这个过程的工具,怎么样?

谷歌有很多关于“将表格转换为XML”(反之亦然)的结果,这会有帮助吗?直接从表格到键/值对的转换是否更好?您尝试过以一种通用的方式解决这个问题吗?


0
当你说“我花了大量的时间”时,你是指开发时间很长,还是指计算时间很长?
个人而言,我会谨慎地将关系型数据库与非关系型数据库解决方案混合使用,因为这可能会在两种不同的范式冲突时产生问题。

抱歉,我是指开发时间。我想我的问题可以简化为“你能混合使用它们吗?”或者你必须“全力以赴”?有一个人投票支持“全力以赴”,但有人尝试过吗? - michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接