非常大的字典

你好,
我试图在具有128克的服务器上加载6.8克大词典
记忆.我有记忆错误.我使用了Python 2.5.2.我如何加载我的
数据?
西蒙

# 回答1


西蒙·斯特罗布(Simon Strobl)在2008年8月1日星期五00:46:09 -0700写道:
"加载字典"是什么意思?它保存了"泡菜"
模块?
如何使用数据库代替字典?
再见,
marc'blackjack'rintsch
# 回答2


"加载字典"是什么意思?
我有一个文件bigrams.py,其中包含以下内容:
bigrams = {
",djy":75,
",djz":57,
",djzoom":165,
",DK":28893,
",dk.au":854,
",DK.B." :3668,
...
}
在另一个文件中,我说:
来自Bigrams进口Bigrams
如果没有其他方法可以做到,我将不得不学习如何使用
Python中的数据库.我希望能够使用相同类型的
但是,具有各种大小的数据的脚本.
# 回答3


西蒙·斯特罗布(Simon Strobl):
这里的模块大小可能有一个限制.你可以尝试
更改磁盘上的数据格式,创建这样的文本文件:
",DJY" 75
",DJZ" 57
",djzoom" 165
...
然后在模块中您可以创建一个空的dict,请阅读
带有以下数据的数据
对于某个file的行:
部分,n = .rsplit("",1)
有一天[part.strip('"'')] = int(n)
否则,您可能必须使用笨拙的DB等.
我明白,我不知道是否有记录的限制
64位Python的尺寸.
再见,
# 回答4


Simon Strobl 让我们在这里消除一件事:此服务器正在运行
64位OS,不是吗?因为如果是32位操作系统,那就钝了
答案是"无论你有多少身体记忆,你都不能
有",您将不得不沿着数据库路线走
(或某种将映射存储在磁盘上的方法,仅
按需将项目加载到内存中).
- -
\ s -si the@chiark.greenend.org.uk- http://www.chaos.org.uk/~sion/
"坦率地说,我对企鹅没有一种方式或另一种方式"
- 亚瑟·克拉克(Arthur C. Clarke)
她的nu变成se bera eadward ofdunhlæddreheafdesbæcebump bump bump bump
# 回答5


在2008年8月1日星期五14:47:17 +0100上
让我们在这里消除一件事:该服务器正在运行64位OS,
不是吗?因为如果是32位OS,则钝答案是"您不能,
不管您有多少身体记忆",您将不得不
沿数据库路由(或某些存储映射的方法)
磁盘并仅按需将项目加载到内存中).
我非常怀疑他拥有128GB的主要记忆,并且正在运行32位OS.
# 回答6


在2008年8月1日星期五14:47:17 +0100上
我非常怀疑他拥有128GB的主要记忆,并且正在运行32位OS.
# 回答7


西蒙·斯特罗布(Simon Strobl)写道:
看看Python BSDDB模块. uing btree桌子很快,并且
它的好处是,一旦桌子打开,编程界面
与正常词典相同. http://docs.python.org/lib/bsddb-objects.html
肖恩(_ @_)
西蒙·斯特罗布(Simon Strobl)在2008年8月1日星期五00:46:09 -0700写道:
您怎么知道字典需要6.8克?
我将猜测我自己的问题的答案.在后来的帖子中,西蒙
写道:
[引用]
我有一个文件bigrams.py,其中包含以下内容:
bigrams = {
",djy":75,
",djz":57,
",djzoom":165,
",DK":28893,
",dk.au":854,
",DK.B." :3668,
...
}
[end Quote]
我猜该文件为6.8g *文本 *.它将有多少内存
采取进口?我不知道,但可能超过6.8克.这
编译器必须以一个巨型片段读取整个文件,分析它,
创建所有字符串和int对象,然后才能创建
dict.通过我的后面计算,单独的指针将
需要大约5GB,没关系指出的对象.
我建议尝试将您的数据存储为数据,而不是作为Python代码.创建一个
文本文件" bigrams.txt",每行一个键/值,诸如此类:
DJY:75
DJZ:57
DJZOOM:165
DK:28893
...
然后这样导入:
bigrams = {}
对于Open('BigRams.txt','r')中的行:
键,值= line.split(':')
bigrams [key.strip()] = int(value.strip())
这会更慢,但是因为它只需要读取数据一行
一次,它可能成功地试图将所有6.8克淘汰
将失败.
- -
史蒂文
# 回答8


在2008年8月1日星期五01:05:07 -0700(PDT),Simon Strobl 我有一个文件bigrams.py,其中包含以下内容:
bigrams = {
",djy":75,
",djz":57,
",djzoom":165,
",DK":28893,
",dk.au":854,
",DK.B." :3668,
...
}
在另一个文件中,我说:
来自Bigrams进口Bigrams
如果没有其他方法可以做到,我将不得不学习如何使用
Python中的数据库.
如果您使用Berkeley DB("导入BSDDB"),则不必学到太多.
这些数据库看起来很像字典字符串:字符串,仅
他们是磁盘支持的.
(我认为这里伯克利DB支持7GB数据集.)
/Jorgen
- -
// jorgen grahn \ x/ snipabacken.se r'lyeh wgah'nagl fhtagn!
# 回答9


在2008年8月3日20:36:33 GMT,Jorgen Grahn ...
如果您使用Berkeley DB("导入BSDDB"),则不必学到太多.
这些数据库看起来很像字典字符串:字符串,仅
他们是磁盘支持的.
....肖恩(Sean)在线程中的其他地方指出了所有这些.
那好吧.我想两次指出这一点并没有受伤. BSDDB已经过去了
与我一起工作非常愉快.我通常避免数据库
像瘟疫这样的编程.
/Jorgen
- -
// jorgen grahn \ x/ snipabacken.se r'lyeh wgah'nagl fhtagn!
# 回答10


在2008年8月3日20:40:02 GMT,Jorgen Grahn ...
>
如果您使用Berkeley DB("导入BSDDB"),则不必学到太多.
这些数据库看起来很像字典字符串:字符串,仅
他们是磁盘支持的.

...所有肖恩都指着 线程中的其他地方.
那好吧.我想两次指出这一点并没有受伤. BSDDB已经过去了
与我一起工作非常愉快.我通常避免数据库
像瘟疫这样的编程.
13.4搁置 - Python对象持久性
``架子''是一个持久的,词典般的对象.区别
使用``dbm''数据库是架子中的值(不是键!)
本质上可以是任意的python对象 -
泡菜模块可以处理.这包括大多数班级实例,
递归数据类型和包含许多共享的对象
子对象.钥匙是普通字符串.
[...]

# 回答11


JörgenGrahn在2008年8月4日上午4:12写道:
是的,我错误地击中了"回复",但没有意识到.我的错.如果我没记错的话,BerkeleydB仅限于2GB的单个文件大小.

听起来很可能.但是有些运气,也许他们已经增加了
以后发布?似乎有很多竞争性的伯克利发行版.
值得调查,但这使我进入:
是的,他声称词典是6.8 GB.他如何测量我
不知道.

对OP:您是如何衡量的?
- -
avi

# 回答12


8月4日,00:51,avinash vora 是的,我错误地击中了"回复",但没有意识到.我的错.
值得调查,但这使我进入:
对OP:您是如何衡量的?
我创建了一个包含字典的Python文件.的大小
该文件为6.8GB.我认为不创建
每次我需要的文本文件中的字典. IE.我想
加载.pyc-file应该更快.但是,python未能创建
一个.pyc-file
西蒙
# 回答13


西蒙·斯特罗布(Simon Strobl)在2008年8月4日星期一07:02:16 -0700写道:
啊,这就是我以为你所做的.那不是词典.那是一个
包含Python代码的文本文件以创建字典.
我的猜测是7GB文本文件将需要更多的内存
一旦转换为实际词典:在我的较早文章中,我估计
大约5GB用于指针.字典的总大小不可能
准确地估算没有更多信息,但我猜想10GB或
20GB不会是不合理的.
您是否考虑过操作系统施加人均限制
在内存使用中?您说您的服务器有128 GB的内存,但是
并不意味着操作系统会产生类似的东西.
而且我不知道如何开始估计多少临时记忆
需要解析和构建这样的巨大Python程序.不仅
它是一个7GB程序,但在一个语句中是7GB.
可能是过早优化的一个很好的例子.出于好奇,如何
从文本文件中创建它需要长期?
- -
史蒂文
# 回答14


您是否考虑过操作系统施加人均限制
根据我们的系统管理员,我可以使用所有128G.
可能是过早优化的一个很好的例子.
好吧,当我使用python时,我没有 必须关心
该语言的内部事务很多.我以为我可以简单地做
无论我的文件有多大,总是一样.换句话说,我
认为Python确实是可扩展的.
我不完全记得这一点.但是我认为这不仅仅是
一小时.
# 回答15


EN MON,2008年8月4日11:02:16 -0300,Simon Strobl
escribió:
看起来像元帅格式(用于创建.pyc文件)无法处理
尺寸如此之大 - 并且该限制将停留一段时间:http://mail.python.org/pipermail/pyt....Ay/073161.html
因此,请遵循以前的任何建议,并将您的字典存储为
数据,而不是代码.
- -
Gabriel Genellina
# 回答16


西蒙·斯特罗布(Simon Strobl)在星期二,2008年8月5日01:20:08 -0700写道:可能是过早优化的一个很好的例子.

好吧,当我使用python时,我没想到要关心
语言的内部事务如此之多.我以为我可以简单地做
无论我的文件有多大,总是一样.换句话说,我
认为Python确实是可扩展的.
是的,当抽象泄漏时,这确实是一种痛苦. http://www.joelonsoftware.com/articl...tractions.html
我不完全记得这一点.但是我认为这不过是
小时.
嗯...比我预期的要长.也许不像我想的那样为时过早.
您是否尝试过泡菜和元帅模块的性能?
- -
史蒂文

# 回答17


西蒙·斯特罗布(Simon Strobl)写道:
Python语言是无限期可扩展的.有限实施
不是. CPYTHON是CPYTHON,该程序汇编为系统可执行文件.最多
OSS运行具有相当有限的呼叫堆栈空间的可执行文件.
CPYTHON程序在可能的情况下被缓存为.pyc文件.这
.pyc的存在和格式是cpython的内部事务
执行.他们绝对不是语言要求或
语言功能.
您是否尝试过将MultigiGabytes源代码文件馈送到其他
编译器?大多数(如果不是全部)可能会被"右"大量折断
代码.
tjr
# 回答18


Simon Strobl Aécrit:
(剪)
由于计算机的RAM有限,因此这是一个愿望.你不能
显然希望像1KB一样处理数据
文本文件.
# 回答19


Bruno Desthuilliers写道:
由于计算机的RAM有限,因此这是一个愿望.你
显然不能期望像您一样处理数据
1KB文本文件.
-http://mail.python.org/mailman/listinfo/python-list
您可以,您只需开始处理多GB外壳和设置即可.
数据库真的很容易,我经常使用它们来操纵漂亮
少量数据是因为它只是分组和加入等的一种简便方法

标签: python

添加新评论