Дескриптор файла потока Cassandra TimeUUID при использовании uuid по умолчанию
У меня есть модель Кассандры как
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
предоставить это. - Relace
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
?
1 ответ
Вы уверены, что вы попали в libuuid
вопрос вы связали? Ваш фрагмент кода показывает стандартную библиотеку uuid
что, вероятно, не имеет этой проблемы. Возможно ли, что в вашей программе есть другая утечка файлового дескриптора?
Если это libuuid
проще всего было бы использовать стандартную реализацию библиотеки. Если скорость вас беспокоит, вы можете рассмотреть возможность создания другой версии libuuid
использовать с python-libuuid
, Я попробовал этот быстро и не заметил утечки дескрипторов файлов: http://www.ossp.org/pkg/lib/uuid/
Я также хочу знать, в чем преимущество использования TimeUUID вместо отметки времени?
Вы не сможете изменить тип столбца в существующей таблице, но ответите на свой вопрос: TimeUUID обычно используется, чтобы избежать коллизий, когда несколько событий могут быть записаны в одном значении временной метки.