Skip to main content

Python client for AcapellaDB database

Project description

Описание

Асинхронный Python-клиент для Key-Value базы данных AcapellaDB.

Примеры использования

Для начала работы необходимо создать сессию:

>>> session = Session(host = 'localhost', port = 12000)

Базовые GET/SET операции с ключами производятся с помощью класса Entry:

>>> # создание объекта Entry, ключи являются массивом строк
>>> entry = session.entry(["foo", "bar"])

>>> # установка значения
>>> await entry.set("value 1")

>>> # установка значения с условием совпадения версии
>>> await entry.cas("value 2")

>>> # получение значения по ключу и сохранение в Entry
>>> entry = await session.get_entry(["foo", "bar"])
>>> print(f'value = "{entry.value}", version = {entry.version}')
value = "value 2", version = 2

Для хранения сложных структур данных введены две части ключа: partition и clustering. Первый используется для распределения данных по кластеру. Все clustering-ключи в пределах одного partition-ключа лежат вместе на каждой реплике, что обеспечивает возможность выборок и batch-запросов.

Пример работы со списком пользователей внутри одного partition'а:

>>> # создание списка
>>> await session.entry(partition = ["users"], clustering = ["first"]).set({
>>>     'age': 25
>>> })
>>> await session.entry(partition = ["users"], clustering = ["second"]).set({
>>>     'age': 32
>>> })
>>> await session.entry(partition = ["users"], clustering = ["third"]).set({
>>>     'age': 21
>>> })

>>> # выборка всех пользователей
>>> data = await session.range(partition = ["users"])
>>> for e in data:
>>>     print(f'{e.key[0]}: {e.value.age}')
first: 25
second: 32
third: 21

>>> # выборка первых 2-х пользователей
>>> data = await session.range(partition = ["users"], limit = 2)
>>> for e in data:
>>>     print(f'{e.key[0]}: {e.value.age}')
first: 25
second: 32

Пример работы с очередью:

>>> # запись событий в очередь по 10 штук
>>> for i in range(10):
>>>     # записи производятся в батч, а потом выполняется один запрос
>>>     batch = BatchManual()
>>>     for i in range(10):
>>>         key = str(uuid1())
>>>         e = session.entry(partition = ["queue-1"], clustering = [key])
>>>         await e.set(value = i, batch = batch)
>>>     # выполнение батча
>>>     await batch.send()

>>> # чтение событий из очереди по 10 штук
>>> first = []
>>> for i in rannge(10):
>>>     data = await session.range(partition = ["queue-1"], first = first, limit = 10)
>>>     for e in data:
>>>         print(f'{e.key}: {e.value}')
>>>     first = data[len(data) - 1].key
>>> 
['be2a5d92-8cc0-11e7-8bb2-40e230b5623b']: 0
['be2a6058-8cc0-11e7-8bb2-40e230b5623b']: 1
['be2a61f2-8cc0-11e7-8bb2-40e230b5623b']: 2
...
['be2ae000-8cc0-11e7-8bb2-40e230b5623b']: 99

>>> # выборка всех событий за определённый интервал времени
>>> data = await session.range(
>>>     partition = ["queue-1"],
>>>     first = ['be2a61f2-8cc0-11e7-8bb2-40e230b5623b'],
>>>     last =  ['be2a7fac-8cc0-11e7-8bb2-40e230b5623b']
>>> )

Для работы с деревьями (DT, Distributed Tree) используются классы Tree и Cursor:

>>> # создание дерева
>>> tree = session.tree(["test", "tree"])

>>> # заполнение дерева
>>> await tree.cursor(["a"]).set("1")
>>> await tree.cursor(["b"]).set("2")
>>> await tree.cursor(["c"]).set("3")
>>> await tree.cursor(["d"]).set("4")
>>> await tree.cursor(["e"]).set("5")

>>> # получение следующего ключа в дереве
>>> next = await tree.cursor(["b"]).next()  # next.key = ["c"]

>>> # получение предыдущего ключа в дереве
>>> prev = await tree.cursor(["b"]).next()  # next.key = ["a"]

>>> # выборка данных по заданным ограничениям
>>> data = await tree.range(first = ["a"], last = ["d"], limit = 2)
>>> print([e.key for e in data])
[['b'], ['c']]

Так же для всех операций доступен транзакционный режим. Транзакции можно использовать в двух режимах:

  1. как context manager
>>> async with session.transaction() as tx:
>>>     # использование транзакции
>>>     entry = await tx.get_entry(["foo", "bar"])
>>>     await entry.cas("value 3")
  1. в "ручном" режиме, необходимо явно вызвать commit/rollback при завершении работы с транзакцией
>>> # создание транзакции
>>> tx = await session.transaction_manual()
>>> try:
>>>     # использование транзакции
>>>     entry = await tx.get_entry(["foo", "bar"])
>>>     await entry.cas("value 3")
>>>     # commit, если не произошло исключений
>>>     await tx.commit()
>>> except Exception:
>>>     # rollback, если произошла какая-либо ошибка
>>>     await tx.rollback()

Больше примеров использования можно найти в тестах.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

acapelladb-0.3.8.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

acapelladb-0.3.8-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

File details

Details for the file acapelladb-0.3.8.tar.gz.

File metadata

  • Download URL: acapelladb-0.3.8.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.20.0 setuptools/51.1.1 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.8.5

File hashes

Hashes for acapelladb-0.3.8.tar.gz
Algorithm Hash digest
SHA256 bd1c5bd861b3d5a6b4c0e76641a501cc5e4f75cc3609201b088f82a51463d9bc
MD5 c68a5faf1f0b286bce4fce9219ad5779
BLAKE2b-256 bf052c40b6734984f00dc3c88b1c0ef5caa29f7f3fec5fbc31dcc2ecd967594e

See more details on using hashes here.

File details

Details for the file acapelladb-0.3.8-py3-none-any.whl.

File metadata

  • Download URL: acapelladb-0.3.8-py3-none-any.whl
  • Upload date:
  • Size: 19.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.20.0 setuptools/51.1.1 requests-toolbelt/0.9.1 tqdm/4.55.0 CPython/3.8.5

File hashes

Hashes for acapelladb-0.3.8-py3-none-any.whl
Algorithm Hash digest
SHA256 951c08c62984467617567eee6f31c13ea03be1187cfd710fedf7d1094982e154
MD5 5016973a8b32334e0b26332193bf70a7
BLAKE2b-256 e3848c046367dae50498f9b0ed4827ba900a99c4f8fa619d888652d42127dd98

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page