Хранение данных Python в системе Linux - PullRequest
2 голосов
/ 27 мая 2011

Мне нужно создать систему для хранения структур данных Python в системе Linux, но у меня есть одновременный доступ для чтения и записи данных из нескольких программ / демонов / скриптов. Сначала я подумал о том, чтобы создать Unix-сокет, который будет прослушивать соединения и обрабатывать запрошенные данные в виде протравленных структур данных Python. Любые записи клиентов будут синхронизироваться с диском (возможно, в пакетном режиме, хотя я не ожидаю, что он будет иметь высокую пропускную способность, так что кеширование Linux vfs, вероятно, будет в порядке). Это гарантирует, что только один процесс читает и записывает данные.

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

Что я пропускаю? SQLite доступен, но я бы хотел сделать это как можно более простым.

Что бы вы сделали?

Ответы [ 5 ]

1 голос
/ 27 мая 2011

Я бы просто использовал SQLite, если он доступен.

См. Этот FAQ: http://www.sqlite.org/faq.html#q5 - SQLite (с pysqlite [0]) должен уметь элегантно обрабатывать ваш параллелизм.

Вы можете хранить данные в виде простых пар ключ-значение, если хотите, нет необходимости использовать все данные BNF для ваших данных.

[0] http://trac.edgewall.org/wiki/PySqlite

1 голос
/ 27 мая 2011

Если вы хотите просто сохранить пары имя / значение (например, имя файла для перехваченных данных), вы всегда можете использовать Berkley DB (http://code.activestate.com/recipes/189060-using-berkeley-db-database/). Если ваши данные ориентированы на числа, вы можете проверить PyTables (http://www.pytables.org/moin). Если вы действительно хотите использовать сокеты (я бы вообще старался этого избегать, так как вам нужно беспокоиться о многих мелочах), вы можете захотеть взглянуть на Twisted Python (хорошо для обработки нескольких соединений через Python без необходимости в многопоточности).

0 голосов
/ 12 июня 2011

Вы можете сериализовать структуры данных и сохранить их как значения, используя ConfigParser.Если вы создали свой собственный lib / module для доступа к данным, вы могли бы выполнить сериализацию в lib, чтобы клиентский код просто отправлял и получал объекты python.Вы также можете обрабатывать параллелизм в lib.

0 голосов
/ 27 мая 2011

Оставляя внутреннее хранилище в стороне (множество вариантов здесь, включая ConfigParser, shelf, sqlite и anydbm), идея с одним процессом, обрабатывающим хранилище, и другими, подключающимися к нему, может быть полезной.Моя первая мысль сделать это - Pyro (удаленные объекты Python).Сокеты, хотя и всегда доступны, могут стать хитрыми.

0 голосов
/ 27 мая 2011

Я бы использовал базу данных. Одиноки. Вот почему они существуют (ну, одна из причин). Не изобретайте велосипед, если не нужно.

...