Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phi系数用例的键值存储(Redis)_Redis_Data Modeling_Correlation_Key Value Store - Fatal编程技术网

Phi系数用例的键值存储(Redis)

Phi系数用例的键值存储(Redis),redis,data-modeling,correlation,key-value-store,Redis,Data Modeling,Correlation,Key Value Store,我想构建一个应用程序,在该应用程序中,用户可以将多个标记字符串分配给日期YYYY-MM-DD字符串。主要用例是计算两个标记a和B的组合的日期,这需要将每个日期放入以下类别之一: 两个标记都没有分配 已分配标记A,但未分配标记B 已分配标记B,但未分配标记A 标记A和标记B已分配 关键的信息是每个类别有多少个日期,而不是什么日期 问题是,如何持久化这些数据,以便能够快速查找上述分类 使用键值存储,例如Redis,将标记作为键存储集合,并将每个标记的日期作为值存储集合,这将是一个选项,可以很容易地用

我想构建一个应用程序,在该应用程序中,用户可以将多个标记字符串分配给日期YYYY-MM-DD字符串。主要用例是计算两个标记a和B的组合的日期,这需要将每个日期放入以下类别之一:

两个标记都没有分配 已分配标记A,但未分配标记B 已分配标记B,但未分配标记A 标记A和标记B已分配 关键的信息是每个类别有多少个日期,而不是什么日期

问题是,如何持久化这些数据,以便能够快速查找上述分类

使用键值存储,例如Redis,将标记作为键存储集合,并将每个标记的日期作为值存储集合,这将是一个选项,可以很容易地用新信息填充存储。对于查找,A和B的交叉点烧结将形成第四类,A和B之间的差异SDIFF以及B和A之间的差异SDIFF将分别形成第二类和第三类

问题仍然是,如何计算第一类:日期的数量,其中标记A和B都不适用于。我想到的唯一选择是通过迭代所有键来读取日期,然后从日期总数中减去类别2、3和4的数字。有没有更优雅、更有效的方法来实现这一目标?或者我最好使用SQL数据库来处理这个用例


编辑:另一个想法是不仅按标记存储日期,而且以冗余的方式按日期存储标记,以便更容易检索所有日期。

这里有两种基本方法:将数据存储在单个规范格式中,并根据需要使用它来计算派生数据;或者提前以多种方式存储信息,以优化查找速度

到目前为止,您已经采取了第一种方法。这很好,因为将信息存储在一个地方可以简化很多事情,并消除数据不一致的风险。缺点是计算派生值可能很慢。在本例中,您讨论的是最佳情况下的操作,而在最坏情况下迭代所有键。尽管在使事情变得更复杂之前进行性能测试总是值得的,但我的直觉是,您担心是对的

将派生数据与规范数据分开存储可以优化查找性能。您的最后一段建议以多种方式存储相同的信息,但只要这样做,您最好存储实际需要的派生值,而不是按标记数据结构保留现有日期


具体来说,我的建议是按日期存储标签,同时单独存储类别1-4的计数。每次记录新的、更改的或删除的输入值时,都会更新规范数据结构并更新计数。您可能可以通过一个相当简单的。然后,您可以在O1时间内访问所需的计数,并确信它们准确地反映了基础数据。

我可以按标签存储多个日期,并使用额外的日期计数器。对于我的基本用例来说,这就足够了!