Англійська для DynamoDB

Вивчіть англійську лексику для DynamoDB: ключі розділів, обмеження і пропускна здатність, пояснені для чіткого обговорення керованої бази даних NoSQL AWS.

DynamoDB зазнає невдачі в невеликій кількості дуже специфічних, дуже іменованих способів — гарячий розділ, обмеження, неефективне сканування — і команда, яка може назвати, який з них вони вдарили, виправляє це за кілька хвилин замість того, щоб провести післяобідній час, вгадуючи, що «база даних повільна»

Ключовий словник

** Ключ розділу ** — основний атрибут, який використовується DynamoDB для розподілу даних між основними розділами зберігання; вибір розділу з низькою кардиналістю або нерівними шаблонами доступу є найпоширенішою причиною проблем з швидкодією. “Ми вибрали date як ключ розділу, і тепер кожен запис для сьогоднішньої дати йде на той самий розділ — це проблема гарячих розділів, яка чекає на те, щоб статися, коли трафік зростатиме.”

** Горячий розділ ** — розділ, який отримує непропорційно більше трафіку читання або запису, ніж інші, що спричинено погано обраним ключем розділу, що призведе до обмеження цього розділу навіть якщо загальна місткість таблиці далеко не вичерпана. “Метрика рівня таблиці виглядає добре, але один ідентифікатор клієнта є гарячим розділом — майже весь його трафік потрапляє на один розділ, тому він бачить обмеження, яких ніхто інший не бачить.”

** Обмеження** — DynamoDB відкидає запит, оскільки він перевищує обумовлену (або, у режимі за запитом, тимчасово доступну) місткість таблиці або розділу, повертаючи помилку з можливістю повторення, а не обслуговуючи запит.

  • “Ці помилки не є вадами у нашому коді — DynamoDB перешкоджає нам, оскільки ми перевищили обмеження нашого об’ єму запису під час цього пакетного імпорту.” *

** Облікова та на запит об’ єми** — два режими обліку та масштабування: обліковий вимагає вказувати одиниці об’ єму читання/ запису заздалегідь (дешевше при постійному, передбачуваному навантаженні), а на запит масштабування автоматично за запитом (простіше, але коштує більше за одиницю при масштабуванні). “Ми перенесли цю таблицю на обсяг на запит після того, як двічі отримали попередження про обмеження під час піків трафіку — забезпечення було дешевше, але вручну регулювати обсяг перед кожним піком було неекономічно.”

Scan — операція, яка читає кожен елемент у таблиці (або велику частину її), на відміну від Query, яка використовує ключ розділу для читання тільки відповідних елементів; сканування є дорогим і зазвичай є ознакою того, що шаблон доступу не був розроблений для моделі DynamoDB. “Ця кінцева точка повільна, оскільки вона виконує повне сканування таблиці при кожному запиті замість запиту — нам потрібен правильний шаблон доступу з правильною структурою ключів, а не просто додавання індексу після факту.”

Звичайні фрази

  • Чи це обмеження, чи це реальна помилка застосування?»
  • Чи є у нас гарячий розділ, чи це проблема загальної ємності?
  • Чи повинна ця таблиця бути на запит замість забезпечення, враховуючи, наскільки високий трафік?»
  • «Чи це сканування чи запит — і чому це сканування?»
  • Що таке ключ розділу тут, і чи дійсно він розподіляє трафік рівномірно?

Приклади висловлювань

Діагностика обмеження швидкості під час інциденту:

  • “Ці помилки, які можна повторити, є дрослінгом, а не перебоями — ми перевищуємо наш обсяг запису під час нічних пакетних завдань. Або ми збільшимо обсяг для цього вікна або переключимо цю таблицю на запит.”*

Пояснення проблеми з гарячим розділом: “Один користувач займає 40% нашого трафіку, а його ідентифікатор користувача є нашим ключем розділу — кожен з їхніх запитів прибуває на той самий розділ, отже вони потрапляють у дросування на розділ, хоча таблиця в цілому має достатньо місця для руху.”

Опис виправлення швидкодії запиту: “Ця звітність виконувала повне сканування таблиці кожного разу, коли хтось завантажував сторінку — ми змінили шаблон доступу навколо запиту за допомогою складного ключа сортування, і він перейшов від восьмисекундного сканування до запиту, який повертається в мілісекундах.”

Професійні поради

  • Розрізняйте ** обмеження швидкості ** від фактичного відключення, яке відбувається явно під час інциденту — обмеження швидкості означає, що DynamoDB працює так, як було спроектовано, і відкидає надлишкове навантаження, яке потребує виправлення пропускної здатності, а не відновлення.
  • Називати hot partition безпосередньо, коли один з користувачів або значення ключа спричиняє локальне обмеження — метричні дані об’ єму на рівні таблиці не покажуть цього, і це потребує перепроектування ключа розділу, а не просто збільшення об’ єму.
  • Обґрунтуйте вибір між ** забезпеченою і за запитом пропускною здатністю ** за допомогою фактичного шаблону трафіку — передбачуване, стабільне навантаження сприяє забезпеченню; різке або непередбачуване навантаження сприяє запиту, і вкажіть, який з цих варіантів застосовується, щоб зробити компроміс зрозумілим.
  • Позначте будь-яке ** сканування ** в шляху гарячого коду під час перегляду — це рідко правильний шаблон доступу в масштабі, і його чітке названня (на відміну від запиту) допомагає переглядачеві вчасно виявити проблему дизайну.

Практичні вправи

  1. Напишіть речення, у якому поясните, що таке « гарячий » розділ і що зазвичай його спричиняє.
  2. Пояснити компроміс між забезпеченою і запитом потужністю.
  3. Описати, чому сканування зазвичай є ознакою шаблону доступу, який потребує переробки.

На практиці: навігація, зворотний зв’язок і співпраця

На швидкодію DynamoDB сильно впливає те, як ви розробляєте таблиці і запиту. Коли ви працюєте з командою, особливо якщо деякі члени не є носієм англійської мови, чітке спілкування про ці технічні деталі стає * критичним *. Це не просто переклад слів; це про передачу * нюанс * професійного зворотного зв’язку і спільних дискусій навколо оптимізації продуктивності. Давайте поглянемо, як це проявляється в типових сценаріях.

Розглянемо коментар перегляду коду у запиті на звантаження, який вводить нову можливість, що сильно залежить від DynamoDB. Старший інженер може написати: «Цей запит, здається, має проблеми з обмеженням. Чи можете ви дослідити використання складного ключа з userID як ключем розділу? Зараз ми спостерігаємо високу затримку під час пікових часу через велику кількість запитів, що потрапляють на один і той же розділ. ” Це не просто зауваження про проблему; це пропонує * конкретну * пропозицію, яка корениться в розумінні архітектури DynamoDB — концепції ключів розділів і їх впливу на обмеження. Фраза « велика затримка » є важливою, оскільки вона описує * ефект *, а не просто позначає запит як « повільний ». У цій фразі уникається жаргонних слів на зразок « недоступний », які можна легко неправильно інтерпретувати.

Аналогічно, повідомлення Slack, що обговорює потенційні поліпшення програми, може звучати так: «Команда, нам потрібно переглянути читання DynamoDB для цієї служби профілю користувача. Поточний дизайн сильно залежить від одного ключа розділу — email. Ми бачимо значні піки навантаження. Давайте обговоримо альтернативи, такі як додавання userID як вторинного ключа або реалізація стратегій кешування для зменшення кількості прямих викликів DynamoDB. “Знову ж таки, фокус не тільки на * зменшенні * навантаження; це на цілевказаному підході з ясним обґрунтуванням - потенційні переваги складного ключа і необхідність стратегічного кешування. Використання «значних піків навантаження» є більш впізнаваним, ніж просто сказати «це повільно»

Крім того, при написанні описів PR, що пояснюють зміни у налаштуваннях DynamoDB, будьте точними. Замість « Оптимізовано налаштування DynamoDB », спробуйте написати: « Оновлено схему таблиць DynamoDB, щоб включити userID як загальний вторинний індекс, поліпшити швидкість читання запитів профілю користувача і зменшити проблеми з обмеженням під час періодів пікового використання ». Таким чином ви показуєте чітке розуміння того, * чому * було внесено зміну і її очікуваного результату. Це про передачу впевненості і продемонструвати технічну компетентність.

import boto3

dynamodb = boto3.client('dynamodb')

response = dynamodb.execute_query(
    TableName='UserProfiles',
    KeyConditionExpression=boto3.util.kbw.to_unnest(boto3.util.kbw.to_keyword(['userID','email'])) #Example - simplified for illustration only
)

print(response['ResponseMetadata']['HTTPStatusCode'])

Цей простий приклад - запит до DynamoDB - підкреслює важливість точної термінології при обговоренні доступу до даних і стратегій отримання. Навіть ця основна команда вимагає точного розуміння TableName, KeyConditionExpression та інших параметрів. Метою є не просто виконання коду, але демонстрація здатності сформулювати * чому * той чи інший запит використовується в контексті дизайну DynamoDB.

Поширені запитання

Про що ця стаття "Англійська для DynamoDB"?

Вивчіть англійську лексику для DynamoDB: ключі розділів, обмеження і пропускна здатність, пояснені для чіткого обговорення керованої бази даних NoSQL AWS.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська для DynamoDB"?

Приблизно 8 min.