6 распространенных проблем DynamoDB в 2022 году

6 распространенных проблем DynamoDB в 2022 году

8 апреля 2022 г.

DynamoDB, основной сервис баз данных NoSQL, предлагаемый AWS, является универсальным инструментом. Это быстро, масштабируется без особых усилий и, что самое приятное, выставляется по требованию! Все это делает DynamoDB первым выбором, когда для нового проекта требуется хранилище данных.


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


Ожидается, что разработчики столкнутся со многими из тех же проблем, начиная свой путь NoSQL с DynamoDB. Эта статья может немного прояснить ситуацию.


1. Условие запроса пропущенный ключевой элемент схемы


Вы пытаетесь выполнить запрос к полю, которое не было проиндексировано для запросов. Добавьте вторичный индекс для поля в таблицу, чтобы исправить это.


DynamoDB — это хранилище документов, что означает, что он может хранить документы в каждой таблице с произвольным количеством полей, в отличие от реляционных баз данных, которые обычно включают фиксированные столбцы в каждой таблице. Эта функция часто заставляет разработчиков думать, что DynamoDB — очень гибкая база данных, что не соответствует действительности на 100%.


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


2. Исключение "Ресурс не найден"


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


Если вы используете CloudFormation или TerraForm, также может случиться так, что эти инструменты все еще развертывают вашу таблицу, и вы пытаетесь получить к ним доступ до того, как они будут завершены.


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


Вот почему вы всегда должны дважды проверять свои конфигурации и учетные данные AWS SDK.


3. Невозможно выполнять операции с несуществующей таблицей


У вас есть ошибки в ваших учетных данных для DynamoDB Local или AWS SDK. Используйте те же учетные записи и регионы в своих учетных данных или настройте DynamoDB Local с флагом -sharedDb, чтобы несколько учетных записей могли использовать одну таблицу.


DynamoDB Local — это инструмент, позволяющий запускать DynamoDB на локальном компьютере в целях разработки и тестирования. Его необходимо настроить так же, как обычную DynamoDB, чтобы система работала как ваше производственное развертывание.


Хотя это делает DynamoDB Local восприимчивым к той же ошибке, мы видели выше во втором пункте. Это также гарантирует, что вы поймаете эти ошибки во время разработки.


4. Предоставленный ключевой элемент не соответствует схеме


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


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


Ознакомьтесь с нашей базой знаний, если вы хотите узнать больше о правильной настройке схем ключей DynamoDB. .


5. Пользователь не авторизован для выполнения: DynamoDB PutItem on Resource


Проблема политики IAM: у пользователя нет доступа к команде PutItem. Чтобы исправить это, вы либо используете управляемую политику AmazonDynamoDBFullAccess, либо, если вы не хотите предоставлять пользователю доступ ко всем командам, явно добавляете PutItem в его роль IAM.


AWS пытается уберечь вас от проблем с безопасностью; именно поэтому сервисы, развернутые на AWS, всегда максимально закрыты для любого доступа. Недостатком является то, что доступ к службам, развернутым в производственной среде, может стать сложной задачей.


Чтобы обойти это, вы можете попробовать AWS CDK. Это инструмент «инфраструктура как код», построенный на основе CloudFormation, который поставляется с конструкциями для всех сервисов AWS. Эти конструкции помогают со всем тем управлением разрешениями, в котором легко ошибиться при использовании AWS.


6. Ожидается, что params.Item будет структурой


Вы используете низкоуровневый клиент DynamoDB из AWS SDK, который ожидает, что вы укажете типы среды выполнения для своих полей. Вместо использования pid: '' вы должны использовать объект, который включает тип: pid: {S: ''}.


AWS SDK для JavaScript включает два клиента. Клиент низкого уровня требует, чтобы вы установили все свои типы вручную, а клиент более высокого уровня, который называется DynamoDB Document Client, пытается вывести ваши типы из значений, которые вы используете в качестве аргументов.


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


Заключение


Использование DynamoDB для ваших проектов  может избавить вас от многих проблем с реляционными базами данных. Самое главное, связанные с ними расходы. Он хорошо масштабируется с точки зрения опыта разработчиков, от отдельных разработчиков до больших команд, и производительности, от одиночных развертываний до реплик по всему миру.


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


Позвольте Dashbird помочь


Если вы новичок в бессерверной работе или DynamoDB, Dashbird может помочь вам освоиться. После того как вы добавите Dashbird в свой аккаунт AWS, он автоматически отслеживает все развернутые таблицы DynamoDB, поэтому вы не упустите ни одной проблемы, которая может возникнуть.


И самое главное, Dashbird поставляется с рекомендациями AWS Well-Architected из коробки. Таким образом, вы можете быть уверены, что используете DynamoDB безопасно и эффективно, не узнавая о ней все заранее.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE