Хранение данных Python в системе Linux

#python #linux #pickle #data-storage

#python #linux #рассол #хранилище данных

Вопрос:

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

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

Что я просматриваю? Доступен SQLite, но я бы хотел, чтобы это было как можно проще.

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

Комментарии:

1. Что это за данные?

2. данные конфигурации; настройки для всех видов системных элементов.

3. Да, похоже, что SQLite будет самым простым способом и определенно более надежным, чем большинство самодельных программ.

Ответ №1:

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

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

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

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

Ответ №2:

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

Ответ №3:

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

Комментарии:

1. Это для встроенной системы — sqlite является единственным вариантом. Я пытаюсь избежать необходимости конвертировать мои объекты в реляционную базу данных, если это возможно

Ответ №4:

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

Комментарии:

1. Это выглядит захватывающе! Мне нужно будет разобраться — это чистый Python? (перекрестная компиляция модулей python на основе C — это настоящая боль)

Ответ №5:

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