我希望能够实现每秒数万次的请求量,希望能达到60,000 -> +90,000次/秒。
我的设置如下:
用户 ---> web应用程序 --> 消息队列 --> 解析器 --> 数据库?
需要说明的是,解析器目前可以使用COPY解析/填充大约18750条记录/秒,因此我们在这方面受到限制,直到我们开始添加更多解析器为止——现在这对我来说不是一个很大的问题。
我有一个需要尽可能快地批量上传尽可能多记录的系统。同样的系统(或者根据您的方法可以是不同的)应该能够响应类似于这样的分析型查询:
wonq = "select sum(amount) from actions where player = '@player' and " + "(type = 'award' or type = 'return') and hand = hand_num" lostq = "select sum(amount) from actions where player = 'player' and " + "type != 'award' and type != 'return' and hand = hand_num"
.....由于它们与另一张表相关联,所以每个用户需要进行10-15千次的查询。不用说,我们现在将这些结果分页显示为每页10个。
我看了以下内容:(假设这些都在同一台服务器上)
mysql (普通的关系型数据库) -- 能够达到15-20千次/秒的请求量; 在当前条件下,如果我们尝试扩展它,每次需要扩展时我们都需要一个单独的主机/数据库--这是不可行的
couchdb (文档导向数据库) -- 没有超过700次/秒; 我真的希望这能拯救我们——没有机会!
vertica (列式数据库) -- 达到了60000次/秒,闭源,非常昂贵; 这仍然是一种选择,但我个人并不喜欢它
tokyocabinet (基于哈希的数据库) -- 目前的插入速度为45,000次/秒,选择速度为66,000次/秒; 昨天当我写这篇文章时,我使用的是一个基于FFI的适配器,它的性能约为5555次/秒; 这是我见过的最快、最棒的数据库!!
terracotta -- (vm集群) 目前正在评估这个和jmaglev(迫不及待地等待maglev本身的推出)--这是最慢的!
也许我只是错误地处理了这个问题,但我一直听说关系型数据库非常慢——那么我听说过的这些超级快速系统在哪里呢?
测试条件::
只是让人们知道我的开发机规格:
双3.2ghz英特尔处理器,1GB内存
Mysql mysql.cnf 编辑如下:
key_buffer = 400M # 原为16M innodb_log_file_size = 100M # 之前不存在 innodb_buffer_pool_size = 200M # 之前不存在
更新:
事实证明,terracotta在我们的应用结构中可能有一席之地,但它绝对不会很快取代我们的数据库,因为它的速度非常慢,堆利用率也很差。
另一方面,我很高兴看到tokyocabinet的非FFI ruby库(即tyrant/cabinet)非常快,现在这是第一选择。