Nosql 存储非平稳分布的数据库
我有很多分类分布。分类分布是从一组k个事件中描述事件发生概率的分布。我需要能够非常快速地获取事件发生的概率 存储分类分布的一种方法是在Redis中使用排序集。每个键索引一个单独的分布,排序集的每个成员是一个特定事件,每个分数是您看到该事件的次数。对于每个键(分布),您还将在该分布中存储每个事件的计数总和,以便正确地进行归一化 我想问的问题是:如果概率随时间变化,存储这些数据的好方法是什么?我基本上希望能够忘记旧的观察结果——即在某个固定的时间间隔内减少每个键的分数和归一化常数Nosql 存储非平稳分布的数据库,nosql,redis,distribution,Nosql,Redis,Distribution,我有很多分类分布。分类分布是从一组k个事件中描述事件发生概率的分布。我需要能够非常快速地获取事件发生的概率 存储分类分布的一种方法是在Redis中使用排序集。每个键索引一个单独的分布,排序集的每个成员是一个特定事件,每个分数是您看到该事件的次数。对于每个键(分布),您还将在该分布中存储每个事件的计数总和,以便正确地进行归一化 我想问的问题是:如果概率随时间变化,存储这些数据的好方法是什么?我基本上希望能够忘记旧的观察结果——即在某个固定的时间间隔内减少每个键的分数和归一化常数 使用上面的redi
使用上面的redis方法,我可以每d分钟运行一次cron作业,迭代每个分布,并减少zscore中的每个计数和归一化常数。然而,这似乎有点错误(我肯定我妈妈告诉我永远不要重复键*),因此我想知道是否有其他人更全面地解决了这个问题?我猜你觉得错误的是以下几种组合:
HSET
Sk以存储事件数据。对快照中的所有事件重复此操作RPUSH快照:
SkLPOP
快照列表,解码时间戳并验证是否过期LPUSH
将其重新推回到快照列表中,直到下一个过期为止。否则HKEYS
Sk的结果,对每个事件键q(E)进行解码,获得相应的计数,然后将相应的ZSET和归一化因子减去该值在最坏的情况下,每个分发和事件都将在每个快照中表示,因此这对错误因素#1没有帮助。乐观地说,任何快照中都会表示适当小比例的分发和/或事件,过期过程的效率将提高。但这将解决错误因素#2即使在最坏的情况下,因为最近发生的事件不会在每次过期cron作业运行时在您的发行版中无条件地减少。我猜您感觉不对劲的是:
HSET
Sk以存储事件数据。对快照中的所有事件重复此操作RPUSH快照:
SkLPOP