Is er een manier om een ​​unieke beperking af te dwingen op een eigenschap (veld) anders dan de primaire sleutel in dynamodb

Als je in dynamodb uniciteit wilt afdwingen in een ander veld dan de primaire sleutel (zoals wanneer je een gebruikerstabel hebt en unieke e-mailadressen voor gebruikers wilt terwijl de primaire sleutel een gebruikers-ID is dat een getal is), is er een manier behalve het scannen van de tabel om te zien of de e-mail al in gebruik is?


Antwoord 1, autoriteit 100%

Kort antwoord: Nee.

DynamoDB is een key:value-archief. Het is erg goed in het snel ophalen/opslaan van items, omdat het een paar compromissen sluit. Dit is een beperking waar u zelf mee om moet gaan.

Niettemin, afhankelijk van uw werkelijke model, kan het een goed idee zijn om dit veld te gebruiken als u hash_keyof om een ​​range_key

te gebruiken

Als dit niet mogelijk is, raad ik je aan om je gegevens te de-normaliseren. Je hebt momenteel zoiets als:

UserTable

  • hash_key: user_id
  • e-mail

Om uniciteit te garanderen, voegt u een nieuwe tabel toe met dit schema:

EmailUser

  • hash_key: e-mail
  • user_id

Om er zeker van te zijn dat een e-mail uniek is, geeft u eerst een GetItemop aan EmailUser.

Dit soort de-normalisatie komt vrij vaak voor bij No-SQL-databases.


Antwoord 2, autoriteit 11%

Er is niet zo’n manier waarop je uniciteit op andere attributen kunt afdwingen, maar met behulp van de boto3-bibliotheek van Python kun je de client gebruiken om een ​​transactie-item uit te voeren en een samengestelde sleutel te gebruiken en proberen je invoer te dupliceren en ze allemaal in één keer in te voegen met behulp van transact_write_items ().
Er is zeer mooie documentatie van aws hierover:
https://aws.amazon. com/fr/blogs/database/simulating-amazon-dynamodb-unique-constraints-using-transacties/


Antwoord 3, autoriteit 9%

Ik denk niet dat de onderstaande benadering wordt besproken of niet, dus plaats de relevante link om een ​​unieke e-mail (of een ander kenmerk) te garanderen. Dit vereist niet het aanmaken van een andere tabel, maar om extra items toe te voegen aan de Gebruikerstabel in de primaire sleutelkolom.

Alternatieve benadering om unieke kenmerken te garanderen in DynamoDB


Antwoord 4, autoriteit 4%

De DynamoDB op zich ondersteunt geen unieke beperkingen, maar u kunt op de een of andere manier zorgen voor uniciteit door atomic counterte gebruiken en deze tellerwaarde in uw gegevens op te nemen.

In mijn geval moet ik ervoor zorgen dat zowel usernameals userIdgeen duplicaten hebben. usernameis mijn partitiesleutel, dus ik zal geen problemen hebben om de attribute_not_exists(username)te gebruiken om overschrijven te voorkomen;

Voor userIdzal ik eerst een nieuwe waarde ophalen uit de atomaire teller en deze dan als mijn userId-waarde plaatsen. Het is misschien niet volledig sequentieel, maar het kan in deze zin uniek zijn.

Other episodes