gpt4 book ai didi

Cassandra 作为重负载下的 session 存储

转载 作者:行者123 更新时间:2023-12-04 15:26:12 29 4
gpt4 key购买 nike

我想使用 Cassandra 来存储 session 相关信息。我没有真正的 HTTP session ——它是不同的协议(protocol),但概念相同。

Memcached 会很好,但我想另外持久化数据。

Cassandra 设置:

  • 非复制 key 空间
  • 单列族,其中键是 session ID,行中的每一列存储单个键/值 - ( Map<String,Set<String,String>> )
  • 列 TTL = 10 分钟
  • 写 CL = 1
  • 读取 CL = ONE
  • 2.000 次写入/秒
  • 5.000 次读取/秒

  • 数据示例:
    session1:{ // CF row key
    {prop1:val1, TTL:10 min},
    {prop2:val2, TTL:10 min},
    .....
    {propXXX:val3, TTL:10 min}
    },
    session2:{ // CF row key
    {prop1:val1, TTL:10 min},
    {prop2:val2, TTL:10 min},
    },
    ......
    sessionXXXX:{ // CF row key
    {prop1:val1, TTL:10 min},
    {prop2:val2, TTL:10 min},
    }

    在这种情况下,一致性不是问题,但性能可能是问题,尤其是磁盘 IO。

    由于我 session 中的数据离开时间很短,我想避免将其存储在硬盘上 - 除了提交日志。

    我有一些疑问:
  • 如果 Memtable 中的列在刷新到 SSTable 之前已过期,将
    Cassandra 无论如何都将此类列存储在 SSTable 中(将其刷新到 HDD)?
  • 我的 key 空间禁用了复制,在这种情况下,不需要在 SSTable 中存储此类过期列,对吧?
  • 每个 CF 帽子最多 10 列。在这种情况下,我将启用行缓存并禁用键缓存。但我希望我的数据仍然
    在 Memtable 中可用,在这种情况下,我可以禁用整个缓存,对吗?
  • 非常感谢此类 session 存储用例的任何 Cassandra 配置提示:)

  • 谢谢,
    马切伊

    最佳答案

    这是我所做的 - 它工作正常:

  • 将 replication_factor 设置为 1 - 表示禁用复制
  • 设置 gc_grace to 0 - 表示在第一次压缩时删除列。这很好,因为没有复制数据。
  • 增加内存表大小并减小缓存大小。我们想从 memtable 读取数据并省略缓存 - 将数据刷新到 HDD 并再次从 HDD 读取到缓存中。
  • 此外,可以禁用提交日志-durable_writes=false

  • 在此设置中,数据将从 memtable 中读取,并且不会使用缓存。 Memtable 可以分配足够的堆来保存我的数据,直到它过期甚至更长时间。

    将数据刷新到 SSTable 后,压缩将立即删除过期行,因为 gc_grace=0 .

    关于Cassandra 作为重负载下的 session 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710348/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com