Дескриптор файла флуда 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 обеспечивают это.
  • Замените 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?


person Nilesh    schedule 05.05.2017    source источник
comment
Почему бы вам не использовать генерацию timeuuid драйвера datastax python?   -  person Ashraful Islam    schedule 06.05.2017
comment
@AshrafulIslam, можешь привести пример? как применить ваше решение?   -  person Nilesh    schedule 08.05.2017


Ответы (1)


Вы уверены, что столкнулись с проблемой libuuid, на которую вы ссылаетесь? В вашем фрагменте кода показана стандартная библиотека uuid, которая, вероятно, не имеет этой проблемы. Возможно ли, что в вашей программе есть утечка другого файлового дескриптора?

Если это libuuid, проще всего будет использовать реализацию из стандартной библиотеки. Если для вас важна скорость, вы можете рассмотреть возможность создания другой версии libuuid для использования с python-libuuid. Я быстро попробовал это и не заметил утечки файловых дескрипторов: http://www.ossp.org/pkg/lib/uuid/

Я также хочу знать, в чем преимущество использования TimeUUID вместо отметки времени?

Вы не сможете изменить тип столбца в существующей таблице, но ответьте на свой вопрос: TimeUUID обычно используется, чтобы избежать коллизий, когда несколько событий могут быть записаны в одно и то же значение метки времени.

person Adam Holmberg    schedule 19.05.2017
comment
Адам, я столкнулся с той же проблемой, которую я связал. Сейчас я использую datastax.github.io/ python-driver/api/cassandra/ теперь для создания нового uuid - person Nilesh; 19.05.2017
comment
Вы используете метод утилиты драйвера и столкнулись с этой проблемой? Это было бы очень удивительно, если бы вы каким-то образом не занимались исправлением стандартной библиотеки uuid. Ты? Какие симптомы заставляют вас думать, что это одна и та же проблема? - person Adam Holmberg; 19.05.2017
comment
Есть ли способ проверить, использую ли я uuid форму libuuid или standard uuid? - person Nilesh; 19.05.2017
comment
Если вы не занимаетесь исправлением обезьян где-то еще, ваш фрагмент кода указывает, что вы используете стандартную версию библиотеки. Вы можете подтвердить import uuid; print uuid.__file__. Это должно быть что-то вроде .../lib/python2.7/uuid.pyc, а не .../lib/python2.7/site-packages/libuuid/__init__.pyc. - person Adam Holmberg; 22.05.2017
comment
Спасибо Адам, проверю это - person Nilesh; 22.05.2017