2012-05-27 2 views
2

나는 카산드라와 함께 SQL에서 NoSQL으로 갈 예정이다.cassandra/NoSQL에서 가치를 식별하는 방법은 무엇입니까?

나는 Do You Really Need SQL to Do It All in Cassandra?을 읽었습니다. 그것은 sql select, join, group by 및 order by에 대해 이야기하지만 SQL 데이터베이스의 "id"개념에 대해서는 아무 것도 없습니다. SQL에서 모든 값에는 고유 식별자가 있습니다.

nosql/cassandra와 비슷한 것이 있습니까? 뭐? newId = lastId + 1 또는 카산드라와 같은 것을 어떻게하는 것이 안전합니까?

감사합니다.

답변

1

카산드라에는 ID가 없습니다. 이는 자신의 문서 ID (키라고 함)를 제공해야하는 간단한 키/값 저장소입니다. 제안 된 접근 방식은 충돌하는 키를 피하도록 설계된 UUID를 사용하는 것입니다.

newId = lastId + 1과 같은 작업은 전혀 안전하지 않습니다. 카산드라는 의도적으로 트랜잭션을 지원하지 않으며, 읽기 + 쓰기를 절대 수행하지 않습니다. 동시 트랜잭션이 실패 할 수

  • 프로세스 A는 죄송 프로세스 B 10
  • 프로세스 A이 표시
  • 10 10 + 1 = 11
  • 프로세스 B가 10 + 1 = 11을 기록 읽기와 쓰기 이 값은 12 여야합니다.

관심이 있으시면 Cassandra Counters이이 문제를 해결합니다.

0

이되는 NoSQL에 대한 SQL에서려고하는 경우에 고려해야 할 또 다른 옵션은 playOrm

그것은 너무 같은 확장 JQL (SQL이 같은 이외의 파티션의 추가하지만, 통지하다) 않을 것입니다

@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"), 

또한 고유 한 클러스터 키를 생성하므로 키 생성을 항상 처리 할 필요는 없습니다. playOrm의 키 생성 예제는 다음과 같습니다 (하나의 클러스터 내에서 고유합니다).

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

관련 문제