内存小的网游经常不足,请问如何处理大数据

您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
发私信给三川
导语:使用大数据平台只是不得不为之的最后手段。
同步到新浪微博
用爱救世界
当月热门文章
为了您的账户安全,请
您的邮箱还未验证,完成可获20积分哟!
您的账号已经绑定,现在您可以以方便用邮箱登录
请填写申请人资料帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:18&分页:home, go home发信人: apey (home, go home), 信区: Perl
标&&题: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 09:12:50 2010), 站内 && 需要读取4-5G的文本文件到多重hash表,如果直接装入内存基本只能读取3百万行左右(大约十分之一)内存就不够了。试了一下 MLDBM, 发现速度慢的无法忍受。 && 下面是大概的源码: && use MLDBM "DB_File";
my $inFile = $ARGV[0]; && my %tagH
tie %tagHash, 'MLDBM', './testmldbm', O_CREAT|O_RDWR, 0640 or die $!; && my $
open ($fin, "&$inFile");
my $i = 0;
while (my $line = &$fin&)
{ &&&& chomp $ &&&& next if $line =~/^\s*$/; &&&&&& print "$i ...\n" if $i % 100000 == 0; &&&& $i++; &&&& my $r = parseLine ($line); &&&&&& my $key = $r-&{'key'}; &&&&&& $tags = exists $tagHash{$key} ? $tagHash{$key} : []; &&&& push @$tags, $r; &&&& $tagHash{$key} = $
} && close ($fin); && -- && ※ 来源:·水木社区 newsmth.net·[FROM: 72.43.122.*]
风催草低 - 明月何尝不照人发信人: Dieken (风催草低 - 明月何尝不照人), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 12:16:39 2010), 转信 &&&& 【 在 apey (home, go home) 的大作中提到: 】
: 需要读取4-5G的文本文件到多重hash表,如果直接装入内存基本只能读取3百万行左右(大约十分之一)内存就不够了。试了一下 MLDBM, 发现速度慢的无法忍受。
: 下面是大概的源码:
: use MLDBM "DB_File";
: ...................
用关系数据库,$r是行,taghash是key这列的索引。
OSS v4 vs. ALSA 大战,Linux 声音支持的未来?
OSS v4 支持混音了! &&
&&&& ※ 来源:·水木社区 ·[FROM: 60.28.165.*]
perl版常驻潜水用户发信人: forrestzhang (perl版常驻潜水用户), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 14:52:36 2010), 站内 && 其实现在我用的机器内存是50G的
【 在 apey (home, go home) 的大作中提到: 】
: 需要读取4-5G的文本文件到多重hash表,如果直接装入内存基本只能读取3百万行左右(大约十分之一)内存就不够了。试了一下 MLDBM, 发现速度慢的无法忍受。
: 下面是大概的源码:
: use MLDBM "DB_File";
: ...................
┌ ╔═╩═╩╗ ───────────────────&& (&&&&&&&&&&──┐
&&&&╔═╬═╬╗&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& / ) )&&&&&&&&&&&&&& &&&&║═╝═╚║&& 2008年5月12日下午14时28分&&&&&&&&&&&&╰( ╯&& (&&&&&&&&&& &&&&╚══╦═╯&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ╭──╮ / ) )&&&&&&
&&&&╚══╬═╝&&&&&&&&&&&&&&四川省汶川县 8.0 级地震&&( ╮&&║╰( ╯&&&&&&
&&&&╚══╯═╯&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)│&&║ ──╮&&&&&& &&&& ※ 来源:·水木社区 newsmth.net·[FROM: 146.151.110.*]
豆粉发信人: chylli (中年不努力,老大徒伤悲), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 14:54:03 2010), 站内 && 32位还是64位的os ?
【 在 forrestzhang (perl版常驻潜水用户) 的大作中提到: 】
: 其实现在我用的机器内存是50G的
&&&& -- && blog:
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 119.181.61.*]
风催草低 - 明月何尝不照人发信人: Dieken (风催草低 - 明月何尝不照人), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 23:02:30 2010), 站内 && 我觉得一个应用程序用到超过 1GB 的内存是一种耻辱。。。。 && 见到 rxvt, mlterm 占 10M 以下内存,看到基于 libvte 的 term
占用上百兆内存,我就对 rxvt/mlterm 怀有深深的敬意。 && 【 在 forrestzhang (perl版常驻潜水用户) 的大作中提到: 】
: 其实现在我用的机器内存是50G的
OSS v4 vs. ALSA 大战,Linux 声音支持的未来?
OSS v4 支持混音了! &&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 114.249.122.*]
豆粉发信人: chylli (中年不努力,老大徒伤悲), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 23:36:34 2010), 站内 && 要看是啥程序.对一次性的程序,糙猛快是正常的,对系统级的程序,大内存也是可以接受的的. && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 我觉得一个应用程序用到超过 1GB 的内存是一种耻辱。。。。
: 见到 rxvt, mlterm 占 10M 以下内存,看到基于 libvte 的 term
: 占用上百兆内存,我就对 rxvt/mlterm 怀有深深的敬意。
: ...................
&& -- && blog:
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 119.181.61.*]
风催草低 - 明月何尝不照人发信人: Dieken (风催草低 - 明月何尝不照人), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 23:47:28 2010), 站内 && 能糙到耗费 1GB 以上内存,说明太马虎了,比如上面那个试图把 4、5GB 数据装入内存的例子。
耗费多少内存合适可以这么考虑:程序需要频繁用到的数据工作集是多大?在此基础上可以为了
实现的简化,多耗费一点点。 && 【 在 chylli (中年不努力,老大徒伤悲) 的大作中提到: 】
: 要看是啥程序.对一次性的程序,糙猛快是正常的,对系统级的程序,大内存也是可以接受的的.
OSS v4 vs. ALSA 大战,Linux 声音支持的未来?
OSS v4 支持混音了! &&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 114.249.122.*]
豆粉发信人: chylli (中年不努力,老大徒伤悲), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 23:53:47 2010), 站内 && 1. 不要试图提前优化,这是谁说的来着? knuth ?
2. lz这不是正在请教如何优化嘛 && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 能糙到耗费 1GB 以上内存,说明太马虎了,比如上面那个试图把 4、5GB 数据装入内存的例子。
: 耗费多少内存合适可以这么考虑:程序需要频繁用到的数据工作集是多大?在此基础上可以为了
: 实现的简化,多耗费一点点。
: ...................
windows vs. linux:
家鸡有食汤锅近,野鹤无粮天地宽 && windows, vi: 我能
linux, emacs: 你不能,我能让你能 &&&& ※ 来源:·水木社区 newsmth.net·[FROM: 119.181.61.*]
风催草低 - 明月何尝不照人发信人: Dieken (风催草低 - 明月何尝不照人), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sat Nov 27 23:58:32 2010), 站内 && 这不是优化,这是起码的构思,Perl 再生猛,哪顶得住把 4、5GB
的数据往内存里塞,这年头还不是人手一台 8GB 内存的机器吧。 && 【 在 chylli (中年不努力,老大徒伤悲) 的大作中提到: 】
: 1. 不要试图提前优化,这是谁说的来着? knuth ?
: 2. lz这不是正在请教如何优化嘛
OSS v4 vs. ALSA 大战,Linux 声音支持的未来?
OSS v4 支持混音了! &&
&&&& ※ 来源:·水木社区 newsmth.net·[FROM: 114.249.122.*]
早生华发发信人: chenkw (早生华发), 信区: Perl
标&&题: Re: perl 处理大数据量内存不足的问题
发信站: 水木社区 (Sun Nov 28 01:11:31 2010), 站内 && 靠,我以为 32G 很吓人了
【 在 forrestzhang (perl版常驻潜水用户) 的大作中提到: 】
: 其实现在我用的机器内存是50G的
人这一辈子真的很难说
不要抱有任何幻想
一定要为自己打算 &&&& ※ 来源:·水木社区 newsmth.net·[FROM: 124.42.22.*]
文章数:18&分页:博客分类:
原作者: ,转载请注明原文地址:
使用jdbc读取SQLServer2005的一个表全部记录,该表具有10W记录,结果发生以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: Java heap space。ResultSet 大小:236,535,956。JVM 总内存大小:312,213,504。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.DBComms.receive(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StatementExecutionRequest.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(Unknown Source)
使用以下代码无效
Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(100);
查文档得知与sqlserver jdbc驱动的select Method有关。selectMethod分为direct和cursor。当使用direct时,驱动会一次性载入所有结果集到jvm内存中,因此造成了out of memory;而使用cursor时,会在服务器端创建一个cursor,因此不会占据客户端的大量内存,办法有两种:
[list=1]
修改SQLServer2005 jdbc的URL: jdbc.url=jdbc:sqlserver://127.0.0.1;instanceName=ProductDB;databaseName=product_selectMethod=cursor
这种方式会影响整个应用程序,可能引起其他普通情况的读取性能下降。
使用如下代码
Statement stmt = con.createStatement(SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
这种方式会造成SQLServer的API侵入,但不失为一种更好的办法。
[/list]
参考文档:
浏览: 186388 次
来自: 成都
非常感谢,刚好遇到这个问题
非常感谢。。
不错不错,小弟学习了。
读编程思想4,读到这里一直就读不下去,看了你的文章,豁然开朗. ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'请问使用POI如何处理大数据量内存溢出的问题。
[问题点数:90分]
请问使用POI如何处理大数据量内存溢出的问题。
[问题点数:90分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|51CTO旗下网站
PHP大量数据循环时内存耗尽问题的解决方案
错误信息显示允许的最大内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据。可想而知,4万条数据全部加载到内存中,内存不爆才怪。
作者:来源:| 08:51
最近在开发一个PHP程序时遇到了下面的错误:
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
错误信息显示允许的最大内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据。可想而知,4万条数据全部加载到内存中,内存不爆才怪。
毕竟编程这么多年,我隐约记得PHP里提供有非一次全部加载数据的API,是像处理流媒体那样,随用随取随丢、数据并不会积累在内存的查询方法。经过简单的搜索,果然在官方网站上找到的正确的用法。
这个问题在PHP的官方网站上叫。
PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处理。这样给了PHP程序额外的功能,比如说,计算行数,将
指针指向某一行等。更重要的是程序可以对数据集反复进行二次查询和过滤等操作。但这种缓冲查询模式的缺陷就是消耗内存,也就是用空间换速度。
相对的,另外一种PHP查询模式是非缓冲查询,数据库服务器会一条一条的返回数据,而不是一次全部返回,这样的结果就是PHP程序消耗较少的内存,但却增加了数据库服务器的压力,因为数据库会一直等待PHP来取数据,一直到数据全部取完。
很显然,缓冲查询模式适用于小数据量查询,而非缓冲查询适应于大数据量查询。
对于PHP的缓冲模式查询大家都知道,下面列举的例子是如何执行非缓冲查询API。
非缓冲查询方法一: mysqli
$mysqli& = new mysqli(&localhost&, &my_user&, &my_password&, &world&);
$uresult = $mysqli-&query(&SELECT Name FROM City&, MYSQLI_USE_RESULT);
if ($uresult) {
&& while ($row = $uresult-&fetch_assoc()) {
&&&&&& echo $row['Name'] . PHP_EOL;
$uresult-&close();
非缓冲查询方法二: pdo_mysql
$pdo = new PDO(&mysql:host=dbname=world&, 'my_user', 'my_pass');
$pdo-&setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo-&query(&SELECT Name FROM City&);
if ($uresult) {
&& while ($row = $uresult-&fetch(PDO::FETCH_ASSOC)) {
&&&&&& echo $row['Name'] . PHP_EOL;
非缓冲查询方法三: mysql
$conn = mysql_connect(&localhost&, &my_user&, &my_pass&);
$db&& = mysql_select_db(&world&);
$uresult = mysql_unbuffered_query(&SELECT Name FROM City&);
if ($uresult) {
&& while ($row = mysql_fetch_assoc($uresult)) {
&&&&&& echo $row['Name'] . PHP_EOL;
【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点头条关注头条头条
24H热文一周话题本月最赞
讲师:30599人学习过
讲师:170753人学习过
讲师:12572人学习过
精选博文论坛热帖下载排行
本书第1版曾被KDnuggets的读者评选为最受欢迎的数据挖掘专著,是一本可读性极佳的教材。它从数据库角度全面系统地介绍了数据挖掘的基本概念...
订阅51CTO邮刊

我要回帖

更多关于 内存小的网游 的文章

 

随机推荐