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

2023-12-09

我有 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 创建不会关闭文件 - 达到文件描述符限制。我尝试找到解决方案,但似乎我认为哪些选项可能不起作用

  • Replace uuid1默认为uuid4, but TimeUUID需要时间参与其中,而且只需uuid1提供那个。
  • Relace uuid1 with cassandra.util.uuid_from_time(time.time()),当检查两者的代码时uuid1 and uuid_from_time,两者看起来都一样,所以也没有解决问题。

最后一个选择是替换TimeUUID with Timestamp类型,但是这个created_at列是primary_key and clustering_order,所以不知道我能不能做到。

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

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


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

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

我还想知道,使用 TimeUUID 而不是时间戳有什么优势?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐