UUID cassandra排序?

时间:2011-11-23 18:53:21

标签: php cassandra uuid thrift phpcassa

假设我有一个用户列系列,其中包含特定客户端的唯一键名+预设

<?php 
uniqid ("serverA");//generate something like; serverA4b3403665fea6
?>

我可以通过二级索引等选择它们,例如:(来自phpcassa的生日​​示例)

$column_family = new ColumnFamily($conn, 'Indexed1');
$index_exp = CassandraUtil::create_index_expression('birthdate', 1984);
$index_clause = CassandraUtil::create_index_clause(array($index_exp));
$rows = $column_family->get_indexed_slices($index_clause);
// returns an Iterator over:
//    array('winston smith' => array('birthdate' => 1984))

foreach($rows as $key => $columns) {
    // Do stuff with $key and $columns
    Print_r($columns)
}

但是我只希望查询每页有30个最新添加的用户(创建的密钥)和多页面布局,每个页面显示较旧的密钥

我目前找到的唯一选项是使用来自phpcassa的uuid

  

uuid1()根据当前时间和MAC生成UUID   机器的地址。

     
      
  • 优点:如果您希望能够按创建时间对UUID进行排序,则非常有用。
  •   
  • 缺点:潜在的隐私泄露,因为它揭示了它是在什么时间生成的计算机。
  •   
  • 可能发生冲突:如果在同一台计算机上同时生成两个UUID(在100 ns内)。 (或者其他一些不太可能   边缘情况。)
  •   
     

uuid2()似乎不再使用了。

     

uuid3()通过获取任意名称的MD5哈希来生成UUID   您在某个命名空间中选择的内容(例如URL,域名等)。

     
      
  • 优点:提供了一种将UUID块分配给不同命名空间的好方法。易于从名称中重现UUID。
  •   
  • 缺点:如果您已经有一个唯一的名称,为什么还需要一个UUID?
  •   
  • 可能发生冲突:如果在名称空间中重用名称,或者存在哈希冲突。
  •   
     

uuid4()生成一个完全随机的UUID。

     
      
  • 优点:没有隐私问题。不必生成唯一的名称。
  •   
  • 缺点:UUID没有结构。
  •   
  • 可能发生冲突:如果您使用错误的随机数生成器,重复使用随机种子,或者非常非常不幸。
  •   
     除了使用SHA-1哈希之外,

uuid5()uuid3()相同   MD5。官方优先于uuid3()

但这意味着我必须重写一些部分+获得碰撞的可能性。

我有没有想到的智能黑客?

1 个答案:

答案 0 :(得分:3)

首先,关于UUID,如果您计划使用uuid1()或uuid4(),则无需担心冲突(这些是唯一真正被使用的)。这种事件的概率是天文数字低。别担心。

为了获得30个最近添加的密钥(以及分页功能),您真正在谈论时间序列数据。这是一个很好的intro to timeseries with Cassandra。您可以使用时间戳或v1 UUID作为列名称,使用唯一键作为列值。如果您选择将v1 UUID用于唯一键,则可以直接将它们放在列名中。那时你只是处理Cassandra中的正常时间序列数据和分页。