2016-06-14 4 views
1

Je migre une application de Cassandra vers DynamoDB. Sur Cassandra, nous avons utilisé comme clé une combinaison de (entityName, TimeUUID), avec DynamoDB pour autant que j'ai lu, je pourrais utiliser une clé primaire Hash + Range. Pour conserver la même structure de données de la base de données de Cassandra, j'ai envisagé d'utiliser entityName comme Hash et timestamp comme range. Ensuite, j'ai pensé que les timestamps n'étaient peut-être pas uniques: je parle de casse de coin, mais la clé primaire Cassandra (entityName, TimeUUID) est plus puissante que DynamoDB Hash + Range (entityName, timestamp), car elle permet l'existence d'éléments avec le même entityName et l'horodatage. Puis-je utiliser le TimeUUID de Cassandra comme gamme de DynamoDb? Y a-t-il une raison pour laquelle je ne devrais pas utiliser cette approche?Cassandra TimeUUID dans DynamoDB

+1

Vous pourriez également envisager de poser/déplacer cette question à http: //dba.stackexchange.com/... – Castaglia

Répondre

1

Vous pouvez (et devriez, si vous pensez que vous pouvez avoir des collisions sur timestamp). La seule prise, je peux penser, est que vous pourriez avoir à gérer between time_x and time_yQuery par vous-même.

Pour exemple, disons que vous avez ces 5 éléments dans votre table:

  • HK: h1. RK: t1_uuid1
  • HK: h1. RK: t1_uuid2
  • HK: h1. RK: t2_uuid3
  • HK: h1. RK: t3_uuid4
  • HK: h2. RK: t4_uuid5

En outre, supposons que t1 < t2 < t3 et UUID sont 4 chaînes de caractères entre aaaa et zzzz

Maintenant, si vous avez besoin tous les éléments avec h1 HK et RK entre t1 et t2, puis votre Query contiendrait quelque chose comme between t1_aaaa and t2_zzzz. En effet, DynamoDB ne comprend pas, à lui seul, le concept des TimeUUID comme Cassandra. Donc, vous devrez gérer les cas comme ci-dessus dans votre couche d'application.