Dynamodb Одиночная таблица
Dokklib-db-это Библиотека Python для шаблона одиночной таблицы DynamoDB. Если вы можете предвидеть свои шаблоны запроса, DynamoDB особенно подходит для приложений без серверов, поскольку он имеет минимальные операционные накладные расходы и без сохранности подключения. (Подробнее о Dynamodb vs SQL для сервера без сервера )
С помощью шаблона единственной таблицы вы помещаете все свои данные, которые хотите выполнить реляционные запросы в одну таблицу DynamoDB. Ключом к успешной конструкции одной таблицы является возможность предвидеть шаблоны запросов, так как вы должны соответствующим образом структурировать данные. Посмотрим, как это работает на практике с Dokklib-DB!
Установите Dokklib-DB
Установите Dokklib-DB и Boto3 с PIP (вам нужен Python 3.6 или более поздней версии):
PIP Install.10.34, <2 “Dokklib-DB
Настройка таблицы
Нам нужна таблица с общим композитным первичным ключом. Мы будем называть ключ раздела PK
И ключ Скандал
. Общие имена ключей позволяют нам хранить разные типы объектов в одной таблице. Мы также нуждаемся в глобальном вторичном индексе, который является обратным первичного индекса (т.е. где ключ раздела – и ключ сортировки
PK
) Мы будем использовать этот обратный индекс для многих-многих реляционных запросов. Вы можете прочитать больше о Настройка одиночной таблицы в документах Dokklib-DB или увидеть Завершите шаблон облачной информации здесь.
Определить сущности
Предположим, что мы хотим иметь возможность добавить наших пользователей в группы и сделать много-ко-то реляционные вопросы, чтобы получить группы пользователя или членов группы. Во -первых, мы определяем объекты пользователя и группы:
import dokklib_db as db class User(db.EntityName): """User entity name. Key value: unique user name, eg. 'alice'. Example key: 'USER#alice'. """ class Group(db.EntityName): """Group entity name. Key value: unique group name, eg. 'my-group'. Example key: 'GROUP#my-group'. """
Эти классы не содержат никаких данных, они просто предоставляют безопасность типов и документацию для наших организаций.
Вставить данные
Посмотрим, как мы можем добавить пользователя в группу:
table = db.Table('SingleTable') # Construct entity keys pk_alice = db.PartitionKey(User, 'alice') print(str(pk_alice)) # USER#alice sk_group_1 = db.SortKey(Group, '1') print(str(sk_group_1)) # GROUP#1 # Add Alice to group one table.insert(pk_alice, sk_group_1)
Предположим, что мы добавили другого пользователя и вторую группу, и у нас есть следующие данные в таблице:
Пользователь#Алиса | ГРУППА 1 |
Пользователь#Алиса | Группа № 2 |
Пользователь#Боб | Группа № 2 |
Теперь мы можем использовать основной индекс для запроса всех групп пользователя:
# Get all the groups that Alice belongs to pk_alice = db.PartitionKey(User, 'alice') print(str(pk_alice)) # USER#alice group_prefix = db.PrefixSortKey(Group) print(str(group_prefix)) # GROUP# alice_groups = table.query_prefix(pk_alice, group_prefix) print(alice_groups) # [{'SK': '1'}, {'SK': '2'}]
А также обратный индекс для запроса всех членов группы:
# Get all users in group two pk_group_2 = db.PartitionKey(Group, '2') print(str(pk_group_2)) # GROUP#2 user_prefix = db.PrefixSortKey(User) print(str(user_prefix)) # USER# inverse_index = db.InversePrimaryIndex() members = table.query_prefix(pk_group_2, user_prefix, global_index=inverse_index) print(members) # [{'PK': 'alice'}, {'PK': 'bob'}]
Это завершает наше короткое вступление. Я призываю вас продолжать исследовать в Dokklib-db документы и предоставить запросы на обратную связь/функции на GitHub.
Оригинал: “https://dev.to/agostbiro/getting-started-with-dokklib-db-for-dynamodb-single-table-228a”