首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于用户间交互的数据库体系结构(8B行,1TB数据)

用于用户间交互的数据库体系结构(8B行,1TB数据)
EN

Database Administration用户
提问于 2017-04-23 08:11:55
回答 1查看 96关注 0票数 0

我正在保存两个用户之间的交互表。我有两种交互类型,每种交互都可以发生不止一次。最简单的参考是Facebook的赞和帖子上的评论:User1做了两个赞,一个评论了User2

我还想要基本的查询能力,就像所有与User1交互的用户一样,用户User1也按交互次数排序。

我目前正在MySQL中保存这个文件,而且一切都进行得很顺利,但是随着表变得越来越大(7.5B行,1TB的总磁盘空间在数据和索引之间平分),插入变得非常缓慢。可占用1k行最多一分钟。

我现在的表格结构:

代码语言:javascript
复制
 CREATE TABLE `interactions` (
  `user_id_to` bigint(11) unsigned NOT NULL,
  `user_id_from` bigint(11) unsigned NOT NULL,
  `type2counter` tinyint(11) unsigned NOT NULL DEFAULT '0',
  `counter` smallint(11) unsigned NOT NULL,
  `updated` date NOT NULL,
  PRIMARY KEY (`user_id_to`,`user_id_from`),
  KEY `uid_from` (`user_id_from`),
  KEY `uid_to_counter` (`user_id_to`,`counter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

编辑:插入如下所示:

代码语言:javascript
复制
INSERT INTO interactions
     (user_id_to, user_id_from, counter, updated)
   VALUES 
     ('2266931634','3180832729','3',NOW() ), 
     ('2266931634','3133897242','1',NOW() ), 
     ('2266931634','3207247957','1',NOW() ),  
     ('2266931634','3520390476','1',NOW() ), 
     ('2266931634','3631954079','1',NOW() ), 
     ('2266931634','3687475949','1',NOW() ), 
     ('2266931634','3627629761','1',NOW() ), 
     ('2266931634','3779990751','1',NOW() ), 
     ('2266931634','4071753134','1',NOW() ), 
     ('2266931634','4290900946','3',NOW() ) 
    ON DUPLICATE KEY UPDATE
             counter=counter+VALUES(counter),
             updated=NOW()

MySQL版本: 5.6.19

EN

回答 1

Database Administration用户

发布于 2017-04-23 19:05:38

这有什么问题!没有列counter??

但是,假设你指的是现有的一个柜台.

  • 在索引中包含counter,并经常更新计数器一次更新表,一次更新索引。
  • 由于PRIMARY KEY的第一部分是user_id_to,所以您有一种很好的方法来定位给定user_id_tocounter。所以,DROP这个指数。这将大大加快速度。

其他要检查的东西..。innodb_buffer_pool_size应占内存的70%左右。这些东西的价值是什么?

PARTITIONing不太可能帮上忙。给定一个好的索引,分区不会更快,因为它实际上将一个1步进程(在索引中查找)转换为一个2步进程:首先找到分区("pruning"),然后在该分区中使用索引。

如果可能,可以使用LOAD DATA或“批处理”INSERTs

INSERTs是什么样子的?也许是INSERT ... ON DUPLICATE KEY UPDATE?对于批处理,最好创建一个tmp表,然后在tmp表上使用带有SELECT的IODKU。更多用于高速摄食。

有些东西看起来很可疑,请提供有关插入、更新和选择的详细信息。

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

https://dba.stackexchange.com/questions/171756

复制
相关文章

相似问题

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