Avis
Avis

Reputation: 506

How to generate TimeUUID in Java/Scala

Does anyone know how to generate TimeBased UUIDs in Java/Scala?

Here is the column family:

CREATE table col(ts timeuuid)

I'm using Cassandra 1.2.4

Appreciate your help!

Upvotes: 12

Views: 22243

Answers (4)

counter2015
counter2015

Reputation: 1117

this is work for cassandra 4.x version

first, import libary in build.sbt

libraryDependencies ++= Seq(
  "com.datastax.oss" % "java-driver-core" % "4.15.0"
)

example

import com.datastax.oss.driver.api.core.uuid.Uuids

import java.time.ZonedDateTime

object Test extends App {
  val timeText = "2022-01-01T00:01:01.002345Z"
  val datetime = ZonedDateTime.parse(timeText)
  val uuid = Uuids.endOf(datetime.toInstant.toEpochMilli)
  println(uuid) // e79b51af-6a95-11ec-7f7f-7f7f7f7f7f7f
}

test on cassandra

cqlsh:test> create table aaa (id timeuuid primary key, t text);

cqlsh:test> insert into aaa(id,t) values(e79b51af-6a95-11ec-7f7f-7f7f7f7f7f7f, 't4');

cqlsh:test> select toTimestamp(id), t from aaa;

 system.totimestamp(id)          | t
---------------------------------+----
 2022-01-01 00:01:01.002000+0000 | t4

Upvotes: 1

Eddie Martinez
Eddie Martinez

Reputation: 13910

If you are using the Datastax drivers you can use the utility class, UUIDs, to generate one

import com.datastax.driver.core.utils.UUIDs;
....
UUID timeBasedUuid = UUIDs.timeBased();

Upvotes: 17

Govind Singh
Govind Singh

Reputation: 15490

i am using the same way for cassandra cli, and for column name i am using

System.currentTimeMillis().toString

scala>     val timestamp = System.currentTimeMillis().toString
timestamp: String = 1406279679674

UPDATE

mainly it depends on your row key if rowKey is your userId or something, then there is no chance of submission of duplicate record in miliseconds but if you think it can be repeat then use

val timestamp = com.eaio.uuid.UUIDGen.newTime().toString

Upvotes: 4

mikea
mikea

Reputation: 6667

Cassandra has UUIDGen for generating Timeuuids. The source for this is here:

https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/utils/UUIDGen.java

Upvotes: 9

Related Questions