MicroPython:Библиотеки/btree
Поддержать проект | Содержание | Введение | Основы | Примеры | Библиотеки | Программы | Платы | Прошивки | Резерв | Резерв |
Содержание
Модуль btree – простая база данных BTree[1]
В модуле btree реализована простая база данных типа «ключ-значение», использующая внешнюю память (дисковые файлы или, в общем случае, объекты stream с произвольным доступом). Ключи отсортированы и хранятся в базе данных, и помимо возможности извлекать значение по заданному ключу, эта база данных также поддерживает упорядоченное сканирование диапазона (т.е. извлечение значений по ключам заданного диапазона). Что касается интерфейса приложения, то принцип работы базы данных BTree очень похож на стандартный тип данных dict, но с одним большим отличием – и ключи, и значения должны быть объектами bytes (то есть, если вам надо будет сохранить объекты других типов, их сначала надо будет сериализировать в bytes).
Модуль btree основан на популярной библиотеке BerkelyDB (версия 1.xx).
Пример:
import btree
# Во-первых, нам надо открыть поток с базой данных.
# Обычно это файл, но может быть и резидентная база данных,
# использующая uio.BytesIO, RAW-раздел во flash-памяти и т.д.
# Обычно вам надо либо создать файл базы данных, либо открыть его.
# Код ниже именно за это и отвечает.
# НЕ ОТКРЫВАЙТЕ базу данных при помощи режима доступа "a+b".
try:
f = open("mydb", "r+b")
except OSError:
f = open("mydb", "w+b")
# Теперь открываем саму базу данных.
db = btree.open(f)
# Добавленные ключи будут отсортированы внутри базы данных.
db[b"3"] = b"three"
db[b"1"] = b"one"
db[b"2"] = b"two"
# Предположительно, все изменения будут кэшироваться в памяти,
# разве что они не будут явно сброшены с помощью функции flush()
# или если база данных не будет закрыта.
# Используем flush() на базе данных в конце каждой «транзакции».
db.flush()
# Печатаем b'two'.
print(db[b"2"])
# Делаем итерацию по отсортированным ключам в базе данных,
# начиная с b"2", пока не достигнем конца базы данных.
# Возвращаем только значения.
# Аргументы, передаваемые методу values() – это ключи.
# Печатаем:
# b'two'
# b'three'
for word in db.values(b"2"):
print(word)
del db[b"2"]
# Больше не «true», печатаем «false»:
print(b"2" in db)
# Печатаем:
# b"1"
# b"3"
for key in db:
print(key)
db.close()
# Не забываем закрыть поток!
f.close()
Функции
- btree.open(stream, *, flags=0, pagesize=0, cachesize=0, minkeypage=0) – открываем базу данных из потока с произвольным доступом (вроде открытого файла). Все аргументы – опциональные и именованные. С их помощью можно менять менять продвинутые настройки работы базы данных (большинству пользователей они не понадобятся).
- flags – в данный момент не используется.
- pagesize – размер страницы, используемый в нодах BTree. Диапазон допустимых значений: 512-65536. Если задать в этом аргументе «0», здесь будет автоматически задано значение по умолчанию, соответствующее используемому порту – оно уже оптимизировано под производительность и/или использование памяти этого порта.
- cashesize – рекомендуемый размер кэша памяти в байтах. Если вы работаете с платой, у которой много памяти, использование большого значения в этом аргументе может улучшить производительность этой платы. Принцип работы кэша таков: система не выделяет сразу память под весь кэш; вместо этого буфер памяти выделяется только при получении доступа к новой странице – пока не будет достигнуто значение в cachesize. Затем эти буферы начинают работать по принципу «вытеснение давно неиспользуемых» (LRU или «least recently used»). Если нужно, можно выделить память и под дополнительные буферы (например, если база данных содержит большие ключи и/или значения). Память, выделенная под эти выделенные буферы памяти для кэша, не вычищается.
- minkeypage – минимальное количество ключей, хранящихся на одной странице. Значение по умолчанию «0» эквивалентно «2».
Возвращает объект BTree, в котором реализован протокол словаря (набор методов) и несколько дополнительных методов, описанных ниже.
Методы
- btree.close() – закрывает базу данных. После завершения работы с базой данных ее обязательно нужно закрыть, т.к. в кэше могут по-прежнему остаться незаписанные данные. Помните, что это не закрывает нижележащий потоковый объект, с помощью которого была открыта база данных – этот поток нужно закрывать отдельно (что тоже обязательно, чтобы данные в буфере были гарантированно сброшены с помощью flush() в нижележащую память).
- btree.flush() – сбрасывает все данные кэша в нижележащий потоковый объект.
- btree.__getitem__(key), btree.get(key, default=None, /), btree.__setitem__(key, val), btree.__detitem__(key) и btree.__contains__(key) – стандартные словарные методы.
- btree.__iter__() – с помощью этого метода выполняется прямая итерация объекта BTree (как это делается со словарем), чтобы получить упорядоченный доступ ко всем ключам.
- btree.keys([start_key[, end_key[, flags]]]), btree.values([start_key[, end_key[, flags]]]) и btree.items([start_key[, end_key[, flags]]]) – эти методы похожи на стандартные словарные методы, но также могут принимать опциональные параметры, чтобы вы могли делать итерацию не только по всей базе данных, но и по некоторому диапазону ключей. Во всех трех методах аргументы start_key и end_key отвечают за ключи. К примеру, метод values() будет делать итерацию по значениям, соответствующим заданному диапазону ключей. Если задать None в аргументе start_key, это будет значить «с первого ключа», а если не задать аргумента end_key или тоже задать в нем None, это будет значить «до конца базы данных». По умолчанию значение в start_key будет входить в итерируемый диапазон, а значение в end_key – нет, и если вам нужно, чтобы значение end_key входило в него, в аргументе flags нужно задать значение btree.INCL. Если вам нужно сделать итерацию ключей в порядке по убыванию, задайте в аргументе flags значение btree.DESC. В аргументе flags можно поместить несколько значений по принципу логического ИЛИ.
Константы
- btree.INCL – флаг для методов keys(), values() и items(), с помощью которого задается, нужно ли включить в итерируемый диапазон значение в аргументе end_key.
- btree.DESC – флаг для методов keys(), values() и items(), с помощью которого задается, что сканирование по ключам должно быть выполнено в порядке по убыванию.
См.также
Ссылки на полезные ресурсы
- AliExpress — глобальная виртуальная (в Интернете) торговая площадка, предоставляющая возможность покупать товары производителей из КНР;
- computeruniverse.net - Интернет-магазин компьютеров(Промо код 5 Евро на первую покупку:FWWC3ZKQ);
- DigitalOcean - американский провайдер облачных инфраструктур, с главным офисом в Нью-Йорке и с центрами обработки данных по всему миру;
- Викиум - Онлайн-тренажер для мозга
- Like Центр - Центр поддержки и развития предпринимательства.
- Gamersbay - лучший магазин по бустингу для World of Warcraft.
- Ноотропы OmniMind N°1 - Усиливает мозговую активность. Повышает мотивацию. Улучшает память.
- Санкт-Петербургская школа телевидения - это федеральная сеть образовательных центров, которая имеет филиалы в 37 городах России.
- Lingualeo.com — интерактивный онлайн-сервис для изучения и практики английского языка в увлекательной игровой форме.
- Junyschool (Джунискул) – международная школа программирования и дизайна для детей и подростков от 5 до 17 лет, где ученики осваивают компьютерную грамотность, развивают алгоритмическое и креативное мышление, изучают основы программирования и компьютерной графики, создают собственные проекты: игры, сайты, программы, приложения, анимации, 3D-модели, монтируют видео.
- Умназия - Интерактивные онлайн-курсы и тренажеры для развития мышления детей 6-13 лет
- SkillBox - это один из лидеров российского рынка онлайн-образования. Среди партнеров Skillbox ведущий разработчик сервисного дизайна AIC, медиа-компания Yoola, первое и самое крупное русскоязычное аналитическое агентство Tagline, онлайн-школа дизайна и иллюстрации Bang! Bang! Education, оператор PR-рынка PACO, студия рисования Draw&Go, агентство performance-маркетинга Ingate, scrum-студия Sibirix, имидж-лаборатория Персона.
- «Нетология» — это университет по подготовке и дополнительному обучению специалистов в области интернет-маркетинга, управления проектами и продуктами, дизайна, Data Science и разработки. В рамках Нетологии студенты получают ценные теоретические знания от лучших экспертов Рунета, выполняют практические задания на отработку полученных навыков, общаются с экспертами и единомышленниками. Познакомиться со всеми продуктами подробнее можно на сайте https://netology.ru, линейка курсов и профессий постоянно обновляется.
- StudyBay Brazil – это онлайн биржа для португалоговорящих студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
- Автор24 — самая большая в России площадка по написанию учебных работ: контрольные и курсовые работы, дипломы, рефераты, решение задач, отчеты по практике, а так же любой другой вид работы. Сервис сотрудничает с более 70 000 авторов. Более 1 000 000 работ уже выполнено.
- StudyBay – это онлайн биржа для англоязычных студентов и авторов! Студент получает уникальную работу любого уровня сложности и больше свободного времени, в то время как у автора появляется дополнительный заработок и бесценный опыт.
Внешние ссылки