ограничение библиотеки полки для объектов в python

Я использую полку для хранения тонны объектов таким образом:

словарь со строками в качестве ключа и списком в качестве значения:

i.e.

data["MITL"] = ["Radio And Television Broadcasting And Communications Equipment", "Communication Equipment"]

или более кратко:

...
SIXH.L         Machine Tools & Accessories, 
GOPAIST.BO     Steel & Iron, 
HERITGFOO.NS   Food Wholesale, 
MITL           Radio And Television Broadcasting And Communications Equipment, Communication Equipment, 
MMLP           Oil Refining, Marketing, Oil & Gas Pipelines, 
SESL.PA        Diversified Electronics, 
...
<≈ 30,000 entries>

Я извлек из этого файла .db и экспортировал в другой файл .db, поэтому отрасли являются ключами, а список состоит из биржевых символов.

...
Industrial Electrical Equipment ['PLPC', 'MAG', 'LPTH', 'IIN', 'CUI', 'ULBI', 'APWC', 'CAPC', 'SVT', 'ARTX', 'CPST', 'OSIS', 'LGL', 'BW', 'HPJ', 'AOS', 'FLUX', 'AMSC', 'GTI', 'RTBC', 'AUSI', 'AETI', 'AIMC', 'HYGS', 'BLDP', 'HOLI', 'NPWZ', 'LIME', 'ESNC', 'ZBB', 'CSTU', 'AXPW', 'GBLL', 'EMR', 'BDC', 'BNSO', 'ENS', 'REFR', 'ABAT', 'FELE', 'CYLU', 'XIDEQ', 'LYTS', 'GAI', 'AMOT', 'CUI.V', 'LSCG']
Toy & Hobby Stores ['BBW']
Distribution ['MNST', 'FMX', 'STZ', 'FIZZ', 'BREW', 'THST', 'LBIX', 'ROX', 'COKE', 'KOF', 'PEP', 'COT', 'REED', 'SAM', 'MGPI', 'DPS', 'CCE', 'BORN', 'KO', 'BUD', 'CCU', 'WVVIP', 'TAP', 'WVVI', 'DEO', 'ABEV', 'VCO']
Home Health Care ['AFAM', 'SCAI', 'ADUS', 'AMED', 'LHCG', 'BIOS', 'CHE', 'HASC']
...
<≈ 300 entries>

Насколько я могу судить, файл пишет нормально, это извлечение данных, что является моей проблемой.

Из документации: "На базу данных также (к сожалению) распространяются ограничения dbm, если он используется — это означает, что (замаринованное представление) объекты, хранящиеся в базе данных, должны быть довольно маленькими, и в редких случаях конфликты ключей могут привести к тому, что база данных откажется от обновлений».

Но я не могу найти информацию об ограничениях dbm Даже с документацией. Причина должна заключаться в том, что списки, которые я сохраняю как значения, слишком велики.

Вот фрагмент кода:

industriesAndTheirStocks = shelve.open("industriesAndTheirStocks")
print(len(industriesAndTheirStocks)) # just to make a point at how many keys there are, proving it's the size of the lists stored that contains the issue

for industry in industriesAndTheirStocks: # fails here because 'industriesAndTheirStocks' can't be iterated through, because it sent a negative number as the size to __iter__
    print("{:<15}".format(industry), end="")
    print(industriesAndTheirStocks[industry])

и ошибка/вывод:

374
Traceback (most recent call last):
  File "read_from_shelve_stock_industry_file.py", line 144, in <module>
    if __name__ == "__main__":main()
  File "read_from_shelve_stock_industry_file.py", line 128, in main
    display_shelve_contents_by_industry()
  File "read_from_shelve_stock_industry_file.py", line 42, in display_shelve_contents_by_industry
    for industry in industriesAndTheirStocks:
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/shelve.py", line 95, in __iter__
    for k in self.dict.keys():
SystemError: Negative size passed to PyBytes_FromStringAndSize

Process finished with exit code 1

Я видел, что у других людей возникают проблемы, которые приводят к той же ошибке, но они использовали версии Python до 7.4.1, и я думаю, что их ошибка была вызвана другой причиной. Вопрос о модуле полки Python

Итак, мои вопросы:

Каковы ограничения dbm?

Есть ли способ исправить наличие больших объектов (словарей, содержащих большие списки в качестве значения) на полке?

Если нет, то как лучше хранить данные, если я не хочу хранить их в оперативной памяти? (что, я думаю, является целью использования Shelve)


person brw59    schedule 13.05.2016    source источник