简体   繁体   中英

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!

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();

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM