【问题标题】:Best approach for storing and reading notifications in Redis (Json or multiple data structure)?在 Redis(Json 或多数据结构)中存储和读取通知的最佳方法?
【发布时间】:2013-03-26 06:40:42
【问题描述】:

我想将我的应用程序的通知存储在排序集或 Redis 列表中(它是一个也有通知的链接缩短器)。我有不同类型的通知,所以我不能像普通字符串一样存储它们。例如,如果我想存储:

  • 通知文本
  • 通知类型

我有两种方法。一种是序列化 Json 并像普通字符串一样存储,并在我想使用它时反序列化。或者另一种方法是将键保存在列表中,然后再次将 Redis 打到另一个数据结构中,以通过存储在列表中的键获取通知哈希。

就像一个通知系统,系统会一直在读写

那么在几行反序列化和序列化 VS 拆分数据和多个 DB 命中?

我对此类决策没有太多经验,所以也许有人遇到过这种情况并且知道在效率和可扩展性方面什么是最佳方法,或者至少可以解释我如何做出决策决定,因为就像很多事情一样,我/我的应用程序的决定不是其他人/其他人的应用程序的决定。

谢谢你:)

【问题讨论】:

  • Redis 允许您存储哈希。这对你来说不是两全其美吗?
  • 这是我不知道哪个是最好的问题:),键列表+哈希或序列化数据列表。
  • 尝试所有这些,看看:)
  • @sLoK 您是否为通知实现了已读/未读状态?如果是这样,您能否为您选择的结构提供一个提示?以及您如何更改读取状态
  • @MarcelDjaman 嗨!抱歉耽搁了,我错过了。是的,我实现了已读和未读状态,这是很久以前的事了,对不起,如果我不记得全部,但方法是维护不同的数据结构,已读、未读和所有(是的,我们有重复,但到底是什么这是 NoSQL,redis 在内存中很便宜 xD)我用 zset 实现,所以按分数排序(分数是 unix 时间戳)。这里有源代码:) [github.com/slok/dwarf/blob/master/dwarf/notifications/…

标签: database json database-design data-structures redis


【解决方案1】:

做了一些测试后,最好的成绩归于 Json 序列化数据案例。我想这也取决于序列化结构。在测试用例中,它只序列化一个 2 字段结构。

一些结果(以秒为单位的时间):

Users: 600
Notifications per user: 1200
--------------------
#### With Json in Set structure ####
Write time: 93.0
Read time: 6.65
dbsize (number of keys): 600
Memory: 150.60M
#### With set and hash data structures ####
Write time: 367.72
Read time: 40.2
dbsize (number of keys): 721200
Memory: 224.17M

我将稍微解释一下测量测试(我使用 Python):

对于 Json 序列化案例,我使用了一个排序集(zset)(每个用户的通知 zset),它的分数是 unix 时间戳(浮点数)。它序列化一个 2 字段哈希(Python dict)并将字符串添加到排序集。

为了检索,我获取了所有的 zset 字符串,并一一反序列化数据。

对于 Hash 方法,我使用了 3 种数据结构:

  • 最简单的一种是每个通知 zset 的计数器,用于创建 每个通知的唯一密钥(我也使用 uuid 进行了测试,结果或多或少是相同的,所以差别不大)
  • 另一种数据结构是 zset,与 Json 情况相同,但我们存储通知哈希键而不是存储 Json 数据
  • 最后一个是包含所有数据字段的通知哈希

并检索数据。和 json 的情况差不多,我从每个 zset 中获取所有的键,然后我一个一个地得到所有的通知。

我知道这种情况不是我所面临的,因为通常我不会检索所有通知,而且测试可能有错误或有更好的方法来解决这种情况。

不管怎样,这里有一些measurements and the test script

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2019-05-13
    • 2023-04-05
    • 2021-07-17
    相关资源
    最近更新 更多