我有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())
,检查uuid1
和uuid_from_time
的代码时,两者看起来都相同,这样也无法解决问题。最后一个选项是将TimeUUID
替换为Timestamp
类型,但此created_at
列为primary_key
和clustering_order
,所以不知道我可以这样做或者不
我的专栏系列已有1,000,000多个数据,所以我不能放弃它们。
我也想知道,使用TimeUUID
代替timestamp
有什么好处?
答案 0 :(得分:1)
您确定自己遇到了问题链接的libuuid
问题吗?您的代码段显示了标准库uuid
,该库可能没有该问题。您的程序中是否可能存在不同的文件描述符泄漏?
如果是libuuid
,最简单的方法是使用标准库实现。如果速度是您的主要考虑因素,您可以考虑构建与libuuid
一起使用的python-libuuid
的不同版本。我快速尝试了这个,并没有注意到任何文件描述符泄漏:http://www.ossp.org/pkg/lib/uuid/
我也想知道,使用TimeUUID而不是时间戳有什么好处?
您将无法更改现有表上列的类型,但要回答您的问题:TimeUUID通常用于避免可能在同一时间戳值中写入多个事件的冲突。