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

时间:2017-05-05 14:19:44

标签: python cassandra timeuuid clustering-key

我有Cassandra模型

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)
    ...
    ...

Recentrly app点击uuid1 creation doesn't close files - hits file descriptor limit。我试图找到解决方案,但似乎我认为可能不起作用的选项

  • 默认情况下将uuid1替换为uuid4,但TimeUUID需要时间部分,只有uuid1才能提供。{/ li>
  • 使用uuid1取消cassandra.util.uuid_from_time(time.time()),检查uuid1uuid_from_time的代码时,两者看起来都相同,这样也无法解决问题。

最后一个选项是将TimeUUID替换为Timestamp类型,但此created_at列为primary_keyclustering_order,所以不知道我可以这样做或者不

我的专栏系列已有1,000,000多个数据,所以我不能放弃它们。

我也想知道,使用TimeUUID代替timestamp有什么好处?

1 个答案:

答案 0 :(得分:1)

您确定自己遇到了问题链接的libuuid问题吗?您的代码段显示了标准库uuid,该库可能没有该问题。您的程序中是否可能存在不同的文件描述符泄漏?

如果是libuuid,最简单的方法是使用标准库实现。如果速度是您的主要考虑因素,您可以考虑构建与libuuid一起使用的python-libuuid的不同版本。我快速尝试了这个,并没有注意到任何文件描述符泄漏:http://www.ossp.org/pkg/lib/uuid/

  

我也想知道,使用TimeUUID而不是时间戳有什么好处?

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