假设我有一个用户列系列,其中包含特定客户端的唯一键名+预设
<?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。除了使用SHA-1哈希之外,
- 优点:没有隐私问题。不必生成唯一的名称。
- 缺点:UUID没有结构。
- 可能发生冲突:如果您使用错误的随机数生成器,重复使用随机种子,或者非常非常不幸。
uuid5()
与uuid3()
相同 MD5。官方优先于uuid3()
。
但这意味着我必须重写一些部分+获得碰撞的可能性。
我有没有想到的智能黑客?
答案 0 :(得分:3)
首先,关于UUID,如果您计划使用uuid1()或uuid4(),则无需担心冲突(这些是唯一真正被使用的)。这种事件的概率是天文数字低。别担心。
为了获得30个最近添加的密钥(以及分页功能),您真正在谈论时间序列数据。这是一个很好的intro to timeseries with Cassandra。您可以使用时间戳或v1 UUID作为列名称,使用唯一键作为列值。如果您选择将v1 UUID用于唯一键,则可以直接将它们放在列名中。那时你只是处理Cassandra中的正常时间序列数据和分页。