首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何以一种自然的方式将频繁修改的列表存储在数据库中,以便它们能够随时阅读?

如何以一种自然的方式将频繁修改的列表存储在数据库中,以便它们能够随时阅读?
EN

Stack Overflow用户
提问于 2013-08-23 01:53:06
回答 7查看 437关注 0票数 4

对于社交网站,我需要为每个实体(数百万这样的实体)存储经常修改的列表,这些实体是:

  • 频繁地附加到
  • 常读
  • 有时减少
  • 列表按主键。

我已经在RDBMS中存储了一些其他类型的数据。我知道我可以将这些列表存储在RDBMS中,就像这样:创建一个包含两个列的表listItems & listId & listItem &要生成任何特定的列表,只需为所有记录WHERE listId = x执行SELECT查询即可。但是,在RDBMS中以这种方式存储列表对于高可伸缩性来说并不是非常理想的。相反,我想以一种自然的方式存储已准备好的列表,以便最大限度地提高检索性能。因为每当我的用户登录并查看页面时,我都需要为用户获取大约100个这样的列表。

那我该怎么解决呢?对于这些数据,应该使用什么样的数据库,可能是为由主键的列添加变量no的数据库,比如Cassandra?

EN

回答 7

Stack Overflow用户

发布于 2013-08-27 05:56:59

我使用了相同的方法,即为每条记录存储一个2列行,然后使用格式化的html转到一个txt文件,然后改为json,最后改为mongodb。

但由于您有频繁的操作,我建议使用cassandra、hbase和google等大型表实现,如accumulo和hypertable。

云数据可能是适合你的。

票数 5
EN

Stack Overflow用户

发布于 2013-09-02 11:14:02

正如您所指出的,解决方案必须是可执行的和可扩展的:我建议您使用Redis和它的列表数据结构和O(1)插入和O (N )取(考虑到从列表中获取最后一个元素),并使用一些散列算法水平缩放它。我不知道你要存储多少数据,有多少台机器可用,但从性能上看,这绝对是最好的选择,因为没有什么比内存访问速度更快了。

如果数据量很大,而且无法将其全部保存在RAM中,那么Cassandra就可以完成按时间排序的列表存储工作,就像上面提到的那样,使用分区策略来存储列表更合适。

还有一个想法:您说读取性能必须是最大的,一旦用户登录,您将需要为这个用户获取上百个列表。为什么不为每个用户准备一个列表呢?这样就会有更多的写入,但是读取将被优化,因为您只需要从一个列表中获取最新的条目。我不确定这是否适合你的任务,只是一个想法。:)

票数 3
EN

Stack Overflow用户

发布于 2013-08-27 16:10:05

我推荐SSDB(https://github.com/ideawu/ssdb),一种Google网络包装器。SSDB用于存储收集数据,如list、map、zset(排序集)。你可以这样使用它:

代码语言:javascript
运行
复制
ssdb->hset(listId, listItem1);
ssdb->hset(listId, listItem2);
ssdb->hset(listId, listItem3);
...
list = ssdb->hscan(listId, 100);
// now list = [listItem1, listItem2, listItem3, ...]

一个映射中的项目数仅限于硬盘大小。另一个解决方案是Redis,但是Redis将所有数据存储到内存中(比如不超过30 is ),因此它可能不适合您的项目。

SSDB支持C++、PHP、Python、Lua和更多客户端。

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

https://stackoverflow.com/questions/18393438

复制
相关文章

相似问题

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