【问题标题】:Are Redis SINTER statements comparable to SQL WHERE statements?Redis SINTER 语句可以与 SQL WHERE 语句相媲美吗?
【发布时间】:2016-04-19 00:50:01
【问题描述】:

我正在努力提高对 Redis 的理解,因为我有一个需要快速处理大量数字的项目,但是,我遇到了一个问题,要么是我的理解错误,要么不知何故我的代码没有按预期工作。

我在 MariaDB 表中有数据,我正在使用 ioredishmset 将每一行的数据放入 Redis 数据库,然后执行 sadd 为我需要旋转的每个点创建索引关闭。

但是,我的结果集不匹配。例如,在 MariaDB 中,我从两个字段中获得了大约 55k 条记录的结果集:

 SELECT COUNT(`Email`) FROM myTable 
 WHERE `Qual Field A`='Yes' AND `Qual Field B`='Something else'

在 Redis 中使用相同的字段我得到了大约 2k 的结果:

 SINTER qualFieldA:'Yes' qualFieldB:'Something else'

根据我在 SO 和其他地方读到的内容,我的印象是,执行 SINTER key1:value key2:value 将大致相当于 SELECT {fields} FROM {table} WHERE field1=value AND field2=value

是这样吗,也许我的 importing 或 sadd 调用已关闭,或者我没有正确理解 SINTER 的工作原理?

【问题讨论】:

  • 如果您的 Set 填充正确,则流程正确。也许分享您的导入代码?
  • 这是我引入记录和sadding 的代码示例。我在想我在 sadd() 中的键控已关闭。 jsbin.com/sefevihohe/1/edit?js,output
  • 您的代码看起来很正常。请注意,您提供的 SINTER 不应在键名中包含刻度 ('),除非它们实际上是数据记录对象中数据的一部分(我倾向于认为它们不是)
  • 哪个数字是“正确的”?
  • @ItamarHaber 不确定密钥名称中的勾号是什么意思。你指的是这条线:.then( () => redis.sadd( 'valueA:' + data[ 'Value A' ], data.Email ) )? @RickJames ~55k。

标签: javascript mysql sql redis mariadb


【解决方案1】:

原则上你是对的,但是,除了导入过程中的错误之外,IMO 的主要嫌疑人是这样的:MariaDB 会以某些方式对值进行索引整理和规范化以供选择,而在 redis 中,你所见即所得。

因此,例如,如果您查询“是”,则 MariaDB 中的值“是”、“是”、“是”和“是”都会被选中,而在 redis 中,只有“是”的值会被选中。

而且它不仅仅是小写 - 如果您处理 unicode,您将进入一个痛苦的世界,试图自己实现规范化和整理。

【讨论】:

  • 我知道“是”v“是”v“是”这件事。奇怪的是,当我在 SQL 查询上加上 LIMIT 时,它更准确。
  • 这主要是一个编码问题,所以我将此标记为正确答案。我使用LIMIT 获得更“准确”结果的原因是该小节恰好与我正在搜索的内容相匹配。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2013-10-10
  • 2015-09-16
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多