Python 默认情况下使用uuid时Cassandra TimeUUID泛洪文件描述符

Python 默认情况下使用uuid时Cassandra TimeUUID泛洪文件描述符,python,cassandra,timeuuid,clustering-key,Python,Cassandra,Timeuuid,Clustering Key,我有卡桑德拉模型 import uuid from cassandra.cqlengine import columns from cassandra.cqlengine.models import Model class MyModel(Model): ... ... created_at = columns.TimeUUID(primary_key=True, clustering_order='DESC',

我有卡桑德拉模型

import uuid
from cassandra.cqlengine import columns
from cassandra.cqlengine.models import Model

class MyModel(Model):
    ...
    ...
    created_at = columns.TimeUUID(primary_key=True,
                         clustering_order='DESC',
                         default=uuid.uuid1)
    ...
    ...
最近,应用程序击中了目标。我试图找到解决方案,但似乎我认为哪些选项可能行不通

  • 默认情况下,将
    uuid1
    替换为
    uuid4
    ,但是
    TimeUUID
    需要时间部分,并且只有
    uuid1
    提供时间部分
  • 在检查和的代码时,将
    uuid1
    cassandra.util.uuid\u from_time(time.time())
    ,两者看起来相同,因此也无法解决问题
最后一个选项是将
TimeUUID
替换为
Timestamp
类型,但是在
列创建的
主键
聚类顺序
,所以不知道我能不能这样做

我的列族已经有1000000多个数据,所以我不能直接删除它们


我还想知道,使用
TimeUUID
而不是
timestamp
,有什么好处?

你确定你所链接的
libuuid
问题吗?您的代码片段显示了标准库
uuid
,它可能没有这个问题。您的程序中是否可能存在不同的文件描述符泄漏

如果是
libuuid
,最简单的方法就是使用标准库实现。如果速度是您最关心的问题,那么您可能会考虑构建一个不同版本的
libuuid
来与
python libuuid
一起使用。我很快尝试了这个,但没有注意到任何文件描述符泄漏:

我还想知道,使用TimeUUID而不是timestamp有什么好处


您将无法更改现有表中列的类型,但要回答您的问题:TimeUUID通常用于避免冲突,因为在同一时间戳值中可以写入多个事件。

为什么不使用datastax python驱动程序的TimeUUID生成?@AshrafulIslam您能举个例子吗?如何应用你的解决方案?亚当,我遇到的问题与我联系的问题相同。我现在使用now来生成新的
uuid
您使用的是驱动程序实用程序方法和问题?这将是非常令人惊讶的,除非您正在以某种方式修补
uuid
标准库。你是吗?什么症状让你相信这是同一个问题?有没有办法检查,我使用的是
uuid
form
libuuid
standard
uuid?除非你在其他地方进行猴子补丁,否则你的代码片段表明你使用的是标准lib版本。您可以通过
导入uuid进行验证;打印uuid.\uuuu文件\uuuu
。它应该类似于
../lib/python2.7/uuid.pyc
,而不是
../lib/python2.7/site packages/libuuid/uuuuid/uuuu init_uuuu.pyc
谢谢Adam,我会检查这个