1

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

最近应用程序命中uuid1 创建不关闭文件 - 命中文件描述符限制。我试图找到解决方案,但似乎我认为哪些选项可能行不通

  • uuid1默认替换为uuid4,但TimeUUID需要时间部分,并且只uuid1提供。
  • 替换uuid1cassandra.util.uuid_from_time(time.time()), 当检查 和 的代码时uuid1uuid_from_time两者看起来相同,所以也不能解决问题。

最后一个选项是替换TimeUUIDTimestamp类型,但此created_at列是primary_keyand clustering_order,所以不知道我能不能这样做。

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

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

4

1 回答 1

1

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

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

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

You won't be able to change the type of the column on your existing table, but to answer your question: TimeUUID is usually used to avoid collisions where multiple events could be written in the same timestamp value.

于 2017-05-19T17:23:20.077 回答