哪个数据库用于大规模更新

时间:2016-01-04 22:09:10

标签: database database-design bigdata nosql

我需要帮助为我的数据选择正确的数据库。 我有usersItems表,其中包含以下列:

userId , itemId , attribute1 ,attribute2,attribute3 .......,attribute10

有1000个用户+ - ,每个用户有100,000个项目(平均)。 表中的数据每3小时从第三方API更新一次。 (我为每个用户提供了更新项目的文件..并非所有用户都真正改变了。)

此表中的数据按原样使用,没有聚合。每个用户都可以在网站上看到他的项目。

今天我使用mySQL并且对记录的大量更新几乎没有问题。 我想将数据迁移到redshift或其中一个NOSQL dbs。

我很乐意听取您的建议。

2 个答案:

答案 0 :(得分:0)

我会调查Aerospike,但这种工作负荷。这就是我们在这里使用的内容,我们对它非常满意。它是一个开源 NoSQL数据库,专为内存和固态磁盘操作而设计。它可以处理大量IOPS(内存中的100k + IOPS,如Redis),如果你设法避免使用超热键(单个'行'上的IOPS超过1000)。它可以配置为复制所有数据,并具有synchronic(仅限SSD)以及异步(HDD)持久性支持。

对于您的用例,您必须决定列表的大小是否可以绑定到128k - 1MB,或者每个用户是否需要无限可增长列表。这将区分使用普通列表(限制为记录大小,128k-1M)或使用大型有序列表(无限)。请注意,在您开始为要查询的列表创建单个主键时,您将克服MySQL限制。不需要加入或任何东西。如果列表条目需要它们自己的主键(例如m:n关系),它只会有点模糊 - 但是,有一些概念可以解决这种问题,就像去规范化一样。

当您花几天时间确定最佳效果时,Aerospike可以帮助您始终保持低延迟,只有AdSpace中的产品才能提供。您现在可能不需要它,但我们发现使用SSD可以让我们在存储的方面更加自由,因为与内存相比容量更高。

我评估的其他选项是Redis或Couchbase - 如果异步持久性对您来说不是问题。

答案 1 :(得分:0)

您应该尝试使用持久性的内存数据库:Redis,CouchBase,Tarantool,Aerospike。

每个人都应该处理大量更新的工作量。这是有效的,因为这些数据库不会更改每次更新时的表空间,而只会附加到事务日志中。这是保持更新的最快方法。

因此,如果您的更新工作负载小于100Mb /秒(旋转磁盘的线性写入速度),那么这些数据库应该可以帮助您。

但是一切都取决于你的具体工作量。您可以测试所有这些数据库并选择最佳数据库。