![]() | 1 27493586 2011-07-13 23:47:23 +08:00 如果是我的话我会这么设计 post:[post_id]:author -> author_id post:[post_id]:comments -> list of comment_id post:[post_id]:date post:[post_id]:content comment:[comment_id]:author -> 注册用户存author_id comment:[comment_id]:name -> 匿名用户留名 comment:[comment_id]:content comment:[comment_id]:date comment:[comment_id]:email author:[author_id]:posts -> set of post_id author:[author_id]:comments -> set of comment_id author:[author_id]:name |
![]() | 3 reus 2011-07-14 01:00:16 +08:00 在redis里面,key是很占空间的,像二楼那样空间效率是很低的,不应该直接k-v,而是用hash HASH post:author [post_id] -> author_id HASH post:comments [post_id] -> packed list of comment_id HASH post:date [post_id] ... 总之用字段名作为hash名,id作为hash的键,可以节省大量空间。这对于redis这样的内存数据库来说是比较重要的。 如果值是集合类型,那就打包一下,对性能没有影响 还有另外一种存储方式,比上面一种占空间略多,但是可以减少一些请求,性能要好些 就是每个post,comment,author作为hash存储,以post:[post_id],comment:[comment_id],author:[author_id]为hash名称,以字段名(author, comments等)作为hash的key。 这种方式可以用一条指令来完成读写,HMSET或者HGETALL/HMGET,上面那种就需要多条HSET/HGET |
![]() | 4 27493586 2011-07-14 03:21:29 +08:00 @reus 学习了,谢谢。Hash还没用过呢,我一读完 http://redis.io/topics/data-types-intro 就跑去用了。。。那文档发表的时候还没加入Hash。 请问还有别的文章或者学习资料吗? |
![]() | 5 reus 2011-07-14 12:57:10 +08:00 |
![]() | 6 xwsoul 2012-06-12 00:17:54 +08:00 因为是NoSQL不存在结构化...却问准确的说法应该是Key如何设计以及数据类型如何选择.... |
![]() | 7 xwsoul 2012-06-12 00:19:36 +08:00 当然,这个问题我也是想问的...Orz |
![]() | 8 qq286735628 2012-06-12 00:36:27 +08:00 ![]() http://coolshell.cn/articles/7270.html 这篇文章可以研究一下 |