首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Redis建模
EN

Stack Overflow用户
提问于 2012-10-24 04:36:03
回答 2查看 197关注 0票数 0

对以下场景进行建模的最佳方法是什么?用户有多个投资组合,每个投资组合都有多个股票。

我想出了以下几点:

股票将以散列的形式出现,如下所示

stk:1 {名称:A,股票代码:val,扇区:val ..}

stk:2 {名称:B,股票代码:val,扇区:val ..}

用户可以是一个散列,如下所示:(将用户的投资组合作为一个集合单独存储是不是更好?)

用户:1 {k1:val1,k2:val2,portfolios:"value|growth|short term"}

用户:2 {k1:val3,k2:val4,portfolios:"value|defensive|penny"}

可以设置投资组合中的股票

用户:1:值(1,3)

用户:2:值(2,3,4)

用户:1:短期(1,5)

用户:2:penny (4)

要为用户添加/删除文件夹,需要“HGET user:n portfolios”,后跟HSET

随着用户和投资组合数量的增长,这是一种好的建模方式吗?

EN

回答 2

Stack Overflow用户

发布于 2012-10-25 02:11:09

如果用户可以有多个投资组合类型,那么最好将它们划分到自己的集合中。

代码语言:javascript
运行
复制
sadd user:1:portfolios value growth "short term"

这使得从用户中删除项目组合就像在集合上调用srem user:1:portfolios value一样简单(当然还有删除" user :ID:TYPE“集合)。

当您想要根据投资组合类型为用户查找股票时,可以使用sunionstoresort命令(例如Ruby语言):

代码语言:javascript
运行
复制
keys = redis.smembers('user:1:portfolios').map do |type|
  "user:1:#{type}"
end

redis.multi do |r|
  r.sunionstore "user:1:stocks:_tmp", *keys
  r.sort "user:1:stocks:_tmp", get: ["stk:*->name", "stk:*->ticket"]
  r.del "user:1:stocks:_tmp"
end

stk:*->name将仅返回name的哈希值。如果您想要获取散列中的所有条目,请使用'KEY->HASHKEY‘语法指定每个条目。

http://redis.io/commands/sort

票数 4
EN

Stack Overflow用户

发布于 2012-10-24 20:30:34

没有最好的方法来建模:这完全取决于您的访问路径。

例如,如果您从用户的角度系统地访问数据,那么您的建议将很好地发挥作用。如果你想知道哪些用户在他们的投资组合中有特定的股票,这将是非常糟糕的。因此,我的建议是列出所有预期的访问路径,并检查它们是否包含在数据结构中。

假设您只需要用户视角,我宁愿将投资组合物化为一个单独的集合,而不是将序列化列表存储在用户散列中:它们将更容易维护。因为您可以使用流水线(或脚本)在一次往返中运行多个命令,所以没有实际的开销。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13038842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档