Вам не всегда нужна большая толстая реляционная база данных

Любите вы это или ненавидите, но в какой-то момент вашей карьеры разработчика программного обеспечения вам придется написать немного SQL. Используете ли вы MySQL, Postgres или любую другую базу данных, накладные расходы на управление этими решениями могут быть обманчиво высокими. Если все, что вам нужно, это хранить некоторые базовые значения, вам может быть интересно, действительно ли вам нужна эта большая и плохая база данных.

Возможно, нет.

Работа над проектом, который требует чтения и записи данных с диска, не требует автоматически традиционной базы данных. Если сложность данных относительно невелика и вам не нужны расширенные функции, такие как репликация, то существует множество альтернатив полноценной реляционной базе данных.

Давайте рассмотрим некоторые из этих простых альтернатив и посмотрим, как они помогут вам начать работу с быстрым хранилищем данных без дополнительных административных издержек.

Полка

Если вы ищете минимальный способ хранения некоторых постоянных данных в Python, возможно, это он. Используя Shelve, вы можете хранить простые объекты Python простым и эффективным способом. Самое приятное в Shelve то, что он уже включен по умолчанию в стандартную библиотеку Python. Вам даже не нужно ничего устанавливать.

Под капотом Shelve использует DBM, древнюю систему баз данных Unix. Несмотря на это, Shelve с DBM по-прежнему достаточно быстр для простых проектов. Это отличный вариант, если вам нужна простота с несложными, чистыми объектами Python.

Вот простой пример хранения простого словаря внутри полки:

#!/usr/bin/env python3
import shelve
store = shelve.open('store')
store['data'] = {'one':1, 'two': 2}
print(store['data']['one'])
store.close()

Ознакомьтесь с официальной документацией по Python, чтобы узнать больше об использовании и настройках Shelve.

PickleDB

Кто не любит огурцы! Кто знал, что они также делают отличные варианты хранения. Хотя технически в названии есть слово база данных, pickleDB далеко не полноценная база данных. Этот модуль Python на самом деле является тем, что считается хранилищем ключ-значение.

С pickleDB вы можете хранить простые данные, похожие на хэш-таблицу. Преимущество этого сверхлегкого решения для хранения данных заключается в том, что его конфигурация чрезвычайно минимальна. Вам не придется бороться с разрешениями или длинными конфигурационными файлами.

Вот пример того, насколько быстро можно начать работу с pickleDB:

import pickledb
store = pickledb.load('store.db', auto_dump=False)
store.set('name', 'bob')
name = store.get('name')
print(name)

Узнайте больше на официальном сайте pickleDB.

TinyDB

Подобно pickleDB и Shelve, TinyDB — еще одно быстрое и легкое хранилище ключей и значений. TinyDB гордится тем, что он ультратонкий, довольно быстрый и невероятно простой в использовании. Интерфейс TinyDB похож на многие хранилища ключей и значений, но предоставляет множество дополнительных функций, таких как возможность писать собственное промежуточное ПО для хранения.

В отличие от pickleDB, TinyDB имеет более надежный API и гораздо более активное сообщество разработчиков.

Вот фрагмент для начала работы с TinyDB:

import tinydb
store = tinydb.TinyDB('store.json')
store.insert({'name':'bob'})
results = store.all()
print(results)

Ознакомьтесь с Документацией TinyDB для получения инструкций по использованию и фантастического руководства по началу работы.

H5py

Иерархический формат данных (или HDF5) — это высокопроизводительный способ хранения огромного объема данных. Первоначально это было разработано как способ стандартизировать распространение и совместное использование больших объемов научных данных.

Однако вам не нужно быть суперкомпьютерщиком, чтобы использовать это как способ хранения данных в Python. На самом деле, проект h5py невероятно упрощает начало работы.

Посмотрите приведенный ниже код, чтобы узнать, как быстро сохранить некоторые данные в HDF5 и прочитать их в Python:

#!/usr/bin/python3
import h5py
store = h5py.File("store.hdf5", "w")
dataset = store.create_dataset("test", (10,), dtype='i')
dataset[0] = 1
dataset[1] = 2
dataset[2] = 3
print(dataset[0])
print(dataset[1])
print(dataset[2])

Если вы используете Numpy и обрабатываете много чисел, то это быстрое и эффективное хранилище данных — один из лучших вариантов. Вы также можете настроить типы данных Numpy прямо в магазине.

Группа HDF, которая является официальной организацией, разрабатывающей и участвующей в проекте HDF, написала в блоге фантастическую запись под заголовком: HDF5 как не требующая конфигурации специализированная научная база данных для Python. Этот пост показывает, насколько полезными могут быть HDF5 и проект h5py для запуска простого хранилища данных.

На официальном h5py GitHub также есть масса доступной информации.

ЗОДБ

ZODB — это несколько более сложный вариант объектно-ориентированного хранилища. Этот проект является частью семейства Zope, которое предлагает множество серверов веб-приложений с открытым исходным кодом.

Используя ZODB, вы можете воспользоваться множеством типов хранилищ и вариантов конфигурации. Система невероятно модульная и позволяет легко переключаться между различными серверными системами хранения в соответствии с постоянно развивающимся приложением. Вы также можете очень быстро запускать такие вещи, как базы данных в памяти.

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

Установка и настройка ZODB немного сложнее, и поэтому для начала работы требуется еще несколько шагов. Перейдите к официальной документации, в которой есть отличное руководство по началу работы.

Также посетите ZODB GitHub для получения дополнительной информации.

Спасибо за прочтение! Если вам понравилась эта статья, ознакомьтесь с другими моими постами: