Структура данных Python: файл SQL, XML или .py

Как лучше всего хранить большие объемы данных в python, учитывая один (или два) 500000 элементов + словарь, используемый для неориентированного поиска по графу?

Я рассматривал несколько вариантов, таких как сохранение данных в формате XML:

<key name = "a">
    <value data = "1" />
    <value data = "2" />
</key>
<key name = "b">
...

или в файле Python для прямого доступа:

db = {"a": [1, 2], "b": ...}

или в базе данных SQL? Я думаю, что это было бы лучшим решением, но должен ли я больше полагаться на SQL для выполнения вычислений, чем на сам python?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
0
1 917
6

Ответы 6

Я бы подумал об использовании одной из многих библиотек графов, доступных для python (например, Python-график)

Вам нужно конкретизировать вашу проблему немного лучше. Сделаю несколько предположений: 1) ваши данные статичны, и вы просто хотите их искать, 2) у вас достаточно памяти для его хранения.

Если скорость запуска приложения не критична, формат данных зависит от вас, при условии, что вы можете поместить их в память Python. Используйте простые типы данных (dicts, списки, строки) для хранения данных, а не XML-график, если вы хотите быстро получить к нему доступ. Вы можете подумать о написании собственного легкого класса для выражения узлов и хранения ссылок на другие узлы в dict или массиве.

Если время запуска приложения имеет решающее значение, подумайте о загрузке данных в программу Python и их сохранении в файле; затем вы можете загрузить обработанную структуру данных (которая должна быть очень быстрой) в производственное приложение.

Если, с другой стороны, ваши данные слишком велики для размещения в памяти или вы хотите иметь возможность постоянно изменять их, вы можете использовать SQL для хранения (либо внешний сервер, либо базу данных SQLite) или ZODB (объект Python база данных).

Если вы храните свои данные в файле XML, его будет легче изменить (например, с помощью блокнота ...), но вы должны принять во внимание, что чтение и анализ всего этого объема данных из файла XML является тяжелой задачей. Использование базы данных SQL (возможно, PostGres) сделает выбор более производительным, DMBS более оптимизированы, чем прямое чтение / анализ файловой системы. Если вы храните все свои данные в какой-либо структуре Python в отдельном файле, вы можете получить преимущество компиляции байт-кода (.pyc), которая не дает повышения вычислительных терминов, но обеспечивает более быструю загрузку (что вы хотите ). Я бы выбрал последний.

XML действительно ориентирован на древовидные структуры и очень многословен. Вы можете посмотреть в RDF способы описания графа в XML, но у него все еще есть другие недостатки, например время на чтение, анализ и создание более 500 тыс. объектов и объем используемого файлового пространства.

SQL действительно ориентирован на описание строк в таблицах. Конечно, вы можете хранить графики, но и здесь вы увидите снижение производительности.

Сначала я бы попробовал маринование на питоне, чтобы узнать, соответствует ли он вашим потребностям. Вероятно, он будет самым компактным и самым быстрым для чтения и создания экземпляров всех объектов.

На самом деле единственная причина использовать другие форматы - это если вам нужно что-то, что они предлагают, например транзакции в SQL или кросс-языковая обработка XML.

Подход с использованием файла python, несомненно, будет самым быстрым, если у вас есть способ поддерживать файл.

Техника исходного кода Python абсолютно правит.

XML медленно разбирается и относительно трудно читается людьми. Вот почему такие компании, как Altova, занимаются бизнесом - XML ​​не нравится редактировать.

Исходный код Python db = {"a": [1, 2], "b": ...}

  1. Быстро разбирается.

  2. Легко читается людьми.

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

Если вас беспокоит переносимость, подумайте о YAML (или JSON) для сериализации объекта. Они также быстро разбираются и их намного легче читать, чем XML.

Другие вопросы по теме