gpt4 book ai didi

data-structures - 雷迪斯 : Pros and Cons for following two approaches

转载 作者:IT王子 更新时间:2023-10-29 06:04:27 25 4
gpt4 key购买 nike

我有很多 javascript 对象,例如:

var obj1 = {"key1" : value1, "key2" : value2, ...}
var obj2 = {"key3" : value3, "key4" : value4, ...}

等等……

以下是两种方法:

  1. 将每个对象存储为 Redis 哈希,即一对一映射。
  2. 有一个 Redis 哈希(可以进行分桶以获得更好的性能),将每个对象作为字符串化对象存储在哈希的每个键中,即每个对象在 Redis 哈希中都有一个键值对。当我们需要使用对象时解析对象。

1) -> 比 2) 占用更多空间,但性能比 2) 好

2) -> 占用的空间比 1) 少,但性能比 1) 差

有没有办法确定哪种方法从长远来看会更好?

更新:此数据用于客户端 (AngularJS),因此所有字符串化 JSON 的解析都在前端完成。

最佳答案

这可能会通过决定哪种方法可以最大限度地减少从 Redis 中提取所需数据所需的步骤数来解决。

案例 1:大量嵌套对象
如果你的对象有很多嵌套,即对象中的对象,像这样,
obj = {key1:{key2:value1, key:3{key4:value2}}}

您可能应该将它们字符串化并存储。
因为 Redis 不允许嵌套数据结构。您不能将一个散列存储在另一个散列中。并且将 hash2 的名称存储为 hash1 中的键并在获取 hash1 之后查询 hash2 等等是不必要的复杂并且有很多查询。在这种情况下,您所要做的就是从 Redis 获取整个字符串并 JSON.parse 它。你可以从对象中获取你想要的任何数据。

情况 2: 没有嵌套对象。
但另一方面,如果没有对象的嵌套,你把它存储为一个字符串,你每次从 Redis 中获取数据时都必须 JSON.parse()。解析 JSON 是阻塞的并且是 CPU 密集型的。 Node.js: does JSON.parse block the event loop?

Redis 文档还说哈希是在非常小的空间中编码的,因此您应该尽可能尝试使用哈希来表示您的数据。 http://redis.io/topics/memory-optimization

因此,在这种情况下,您可能会继续将它们全部存储为单独的哈希值,因为查询特定值会容易得多。

--------更新--------
即使 JSON 解析是在客户端完成的,也尽量不要做不必要的额外计算:)
但是嵌套对象作为字符串更容易存储和查询。否则,您将不得不查询多个哈希表。在这种情况下,存储为字符串化对象可能只是为了提高性能。

Redis 非常有效地存储小散列。如此之多,以至于存储多个小 HashMap 比一个大 HashMap 更节省内存。
可以在 redis.conf 中找到决定要使用的编码的键数
hash-max-zipmap-entries 512
每个键的值也应该是 hash-max-zipmap-value 64
因此,您现在可以根据对象的嵌套、哈希键的数量、Redis 的内存效率更高以及分配给键的值来决定。

一定要通过http://redis.io/topics/memory-optimization

关于data-structures - 雷迪斯 : Pros and Cons for following two approaches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35992830/

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