2012-05-27 6 views
2

Je vais de SQL à NoSQL avec Cassandra.Comment identifier une valeur dans cassandra/NoSQL?

J'ai lu Do You Really Need SQL to Do It All in Cassandra?. Cela parle de sql select, join, group by et order by, mais il n'y a rien sur le concept "id" dans la base de données sql. En SQL, toutes les valeurs ont un identifiant unique.

Y at-il quelque chose comme ça avec nosql/cassandra? Quelle? Est-il sûr de faire quelque chose comme newId = lastId + 1 ou quelque chose comme ça avec Cassandra et comment?

Merci.

Répondre

1

Les ID n'existent pas dans Cassandra. Il s'agit d'un simple magasin de clés/valeurs dont vous avez besoin pour vous fournir vos propres ID de document (appelés clés). L'approche suggérée consiste à utiliser des UUID, conçus pour éviter les conflits de clés.

Faire quelque chose comme newId = lastId + 1 n'est pas sûr du tout. Cassandra ne veut pas, par sa conception, supporter les transactions, et aucun moyen de rendre atomique en lecture et écriture. Les transactions simultanées peuvent faire échouer cette:

  • Processus A lit 10
  • procédé B lit 10
  • Process A + 1 écrit = 10 11
  • procédé B écrit 10 + 1 = 11 ... oups , cela devrait être 12.

Si cela vous intéresse, Cassandra Counters résout ce problème.

0

Si vous allez de SQL à NoSQL, une autre option à considérer est playOrm

Il ne JQL Scalable comme si (remarquez l'ajout de partitions mais autre que celui, SQL est le même)

@NoSqlQuery(name="findJoinOnNullPartition", query="PARTITIONS p(:partId) select p FROM TABLE as p INNER JOIN p.security as s where s.securityType = :type and p.numShares = :shares"), 

En outre, il va générer des clés de cluster uniques pour vous aussi bien que vous n'avez pas toujours besoin de gérer la génération de clé;). Un exemple de la génération de clé de playOrm est ici (qui est unique dans un cluster) ...

https://github.com/deanhiller/playorm/blob/master/input/javasrc/com/alvazan/orm/api/base/spi/UniqueKeyGenerator.java

Questions connexes