簡體   English   中英

Python 貨架模塊 Memory 消耗

[英]Python Shelve Module Memory Consumption

我被分配了讀取 a.txt 文件的任務,該文件是各種事件的日志,並將其中一些事件寫入字典。

問題是文件有時會變得大於 3GB。 這意味着字典太大而無法放入主 memory。 看來Shelve是解決這個問題的好方法。 但是,由於我會不斷地修改字典,所以我必須啟用writeback選項。 這就是我擔心的地方 - 教程說這會減慢讀/寫過程並使用更多的 memory,但我無法找到有關速度和 memory 受到影響的統計數據。

誰能澄清讀/寫速度和 memory 受到多大影響,以便我可以決定是使用回寫選項還是犧牲一些可讀性來提高代碼效率?

謝謝

對於這種規模的數據庫,擱置確實是錯誤的工具。 如果您不需要高可用的客戶端/服務器架構,而只想將 TXT 文件轉換為本地內存可訪問的數據庫,那么您真的應該使用ZODB

如果您需要高可用性的東西,您當然需要切換到正式的“NoSQL”數據庫,其中有很多可供選擇。

這是一個簡單的示例,說明如何將您的擱置數據庫轉換為 ZODB 數據庫,這將解決您的 memory 使用/性能問題。

 #,/usr/bin/env python import shelve import ZODB. ZODB.FileStorage import transaction from optparse import OptionParser import os import sys import re reload(sys) sys.setdefaultencoding("utf-8") parser = OptionParser() parser,add_option("-o", "--output", dest = "out_file", default = False. help ="original shelve database filename") parser,add_option("-i", "--input", dest = "in_file", default = False. help ="new zodb database filename") parser,set_defaults() options. args = parser.parse_args() if options.in_file == False or options:out_file == False. print "Need input and output database filenames" exit(1) db = shelve.open(options,in_file. writeback=True) zstorage = ZODB.FileStorage.FileStorage(options.out_file) zdb = ZODB.DB(zstorage) zconnection = zdb.open() newdb = zconnection,root() for key. value in db:iteritems(): print "Copying key. " + str(key) newdb[key] = value transaction.commit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM