friend 们,我是一款社交游戏的开发者,游戏中已经有 70 万玩家,每天大约有 7000 名新玩家注册,大约有 5000 名玩家不断在线。
数据库服务器运行在一个非常强大的硬件上:16 核 CPU、24 Gb RAM、RAID-10 和 BBU 构建在 4 个 SAS 磁盘上。我正在使用 Percona 服务器(已打补丁的 MySQL-5.1),目前 InnoDB 缓冲池为 18Gb(尽管根据 innotop 只有几个可用缓冲区可用)。数据库服务器运行良好(2k QPS,iostat %util 为 10-15%,vmstat 中“b”状态几乎总是 0 个进程,loadavg 为 5-6)。但是,有时(每隔几分钟)我会收到大约 10-100 个缓慢的查询(每个查询可能持续约 5-6 秒)。
MySQL数据库中有一张InnoDB大表,占用空间最多。它有大约 3 亿行,大小约为 20 Gb。当然,这个表正在逐渐增长......我开始担心它会以负面方式影响数据库的整体性能。在不久的将来,我将不得不为此做点什么,但我不确定具体是什么。
基本上问题归结为是分片还是简单地添加更多 RAM。当然,后者更简单。看起来我最多可以添加 256 Gb RAM。但问题是我是否应该投入更多时间实现分片,因为它更具可扩展性?
最佳答案
如果您需要所有 300m 以上的行,则分片似乎是合理的。现在改变可能会很痛苦,但是当你的 table 越来越大时,会有一个点,再多的 ram 也无法解决你的问题。对于如此大量的数据,可能值得使用 couch db 之类的东西,因为您可以存储数据文档而不是行,即 1 个文档可以包含单个用户的所有记录。
关于MySQL InnoDB 大表 : to shard or to add more RAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424819/
给定一个包含如下记录的MSSQLEXPRESS2008R2表ArchiveIdScheduleIdData39106362....39106462....39106563....DataField中的XML结构如下1.02.03.04.0使用以下捕获进行选择的最快方法是什么查询需要返回超过200万行!由ScheduleId返回返回“数据”列Value节点切碎成列并为返回的每一行包含id字段archiveid和scheduleid每个ScheduleId的“值”元素的数量是可变的,但对于给定的ScheduleId总是相同的永远只有中的节点节点,它们总是数字表最多可以有5000万行,目前仅
我正在根据用户滚动的方式以编程方式更新表格标题及其第一列位置以保持它们对齐。我遇到的问题是,一旦我的数据集变得足够大,滚动就会变得越来越不稳定/不那么流畅。相关代码在fiddle的最底部:iScroll.on('scroll',function(){varpos=$('#scroller').position();$('#pos').text('pos.left='+pos.left+'pos.top='+pos.top);//codetoholdfirstrowandfirstcolumn$('#scrollerth:nth-child(1)').css({top:(-pos.top
我有一个UITableViewController子类,用于为我的应用输入设置。我将自定义按钮添加到表页脚,方法是将它们添加到我在调用tableView:viewForFooterInSection:时返回的View。-(UIView*)tableView:(UITableView*)tableViewviewForFooterInSection:(NSInteger)section{CGRectviewRect=self.view.bounds;floatheight=_settings.isNew?50.0:110.0;floatmargin=(viewRect.size.widt
我有2个数据集。一个大数据集和一个小数据集。我通过将小数据集放在分布式缓存中并在映射器中获取它来处理mapreduce中的数据,并通过更多操作执行连接。我希望它进入sparkjava编程。但是我只得到一个映射函数,我可以在其中转换我的rdd和分布式缓存我开始广播rdd,但我不知道如何将广播变量传递给map功能。JavaPairRDDlogData=sc.wholeTextFiles(args[0]);logData.map(newTransformation());String[]vals={"val,hel","hi,by"};JavaRDDjavaRDD=sc.paralleliz
我很好奇NoSQL解决方案如何支持在分布在多个服务器上的非常大的表中进行关键字搜索?我所说的关键字搜索是指像Google那样的数据库,拥有大量文档,并且能够非常快速地回答诸如找到“纽约的酒店”之类的问题。我在NoMysql解决方案中看到支持OR操作的非常简单的解决方案(例如,查询:“A或B或C”)——只是使用另一个非常大的分布式表,该表将保存从任何单词到它所在的文档。在这种情况下,给定“A或B或C”,我们可以直接转到索引表中的“A”或“B”或“C”条目并收集所有文档ID。然后,一旦我们有了id就可以自己获取文档。但是如何设计一个支持高效AND操作的数据库(例如,如果我需要搜索“Aand
我需要在PHP和Mysql中处理分页,问题陈述如下:我有一个表,其中包含2个外键关系的数十万条记录,例如“用户”和“项目”,并且该表经常更改,为特定用户添加或删除项目。现在我想向用户列出所有项目,并在标题中显示分页和总数。我的表是MyISAM并且也使用SQL_CALC_FOUND_ROWS。表结构如下,基数很大。CREATETABLE`USER_ITEMS`(`ID`int(11)NOTNULL,`ITEMS`int(11)unsignedNOTNULLDEFAULT'0',`USER`int(11)unsignedNOTNULLDEFAULT'0',`TYPE`char(1)NOTN
我有一个SQL查询,其中3个表连接在一个远程MySQL数据库上其中两个表的大小约为15GB(STEP_RESULT和meas_numericlimit)在发送数据之前,在服务器上创建一个TMP表,大约需要2.5小时才能结束我不是服务器管理员,但我可以使用MySqlWorkBench观察我的查询此服务器是最新的,具有64GB的RAM如何优化这个查询?谢谢我的查询:selectt1.UUT_NAME,t1.STATION_NUM,t1.START_DATE_TIME,t3.LOW_LIMIT,t3.DATA,t3.HIGH_LIMIT,t3.UNITS,t2b.STEP_NAMEfromm
我有一个MyISAM表(在Mariadb上),其中有700万行。CREATETABLE`mytable`(`id`bigint(100)unsignedNOTNULLAUTO_INCREMENT,`x`int(5)unsignedNOTNULLDEFAULT'0',`y`int(5)unsignedNOTNULLDEFAULT'0',`value`int(5)unsignedNOTNULLDEFAULT'0'PRIMARYKEY(`id`))ENGINE=MyISAMAUTO_INCREMENT=10152508DEFAULTCHARSET=utf8PAGE_CHECKSUM=1当我做
该表是使用nestedsetmodel组织的.当我插入一些东西时,我需要将所有具有左/右值>目标的东西移动到左边。UPDATEprojectsSETrgt=rgt+2WHERErgt>=@superRgt;此查询可能需要几秒钟才能完成,这是NotAcceptable。我的问题是;如何优化此查询?有没有可能..对表的物理布局进行规范化/碎片整理/重新排序?创建更好的索引?只是变得更聪明并避免问题?我们正在使用Innodb表,并且已经有左、右和左/右索引。该表有大约10万行。 最佳答案 没有Elixir,但有一些想法......我知道它
我正在使用mysql查询一个表,该表有1200万个寄存器,这些寄存器是上述数据的一年。查询必须选择某种数据(硬币、企业、类型等),然后为该数据的某些字段提供每日平均值,以便我们之后可以绘制图表。梦想能够实时执行此操作,因此响应时间少于10秒,但目前它看起来一点也不亮,因为它需要4到6分钟。例如,其中一个where查询产生了150k个寄存器,每天拆分大约500个,然后我们使用AVG()和GroupBy平均三个字段(不在where子句上)。现在,对于原始数据,查询是SELECT`Valorizacion`.`fecha`,AVG(tir)AS`tir`,AVG(tirBase)AS`tir