Использование столбца VARCHAR(36) и генератора случайных чисел UUID версии 4 Java решает проблему, но проблема в том, что UUID не являются последовательными, поэтому это приведет к еще одной проблеме с индексами и вставляется особенно в некоторые большие таблицы (1+ миллион строк).
Я пытаюсь сгенерировать последовательный, но случайный UUID, заменяя наиболее значимые биты из UUID текущей меткой времени (в любом случае эти биты уже представляют метку времени). Я знаю, что в Интернете есть решения для этого, а именно COMB UUID, но, как ни странно, я не смог найти для него реализацию Java. Я думал, что это обычная проблема.
Я нашел интересную реализацию на C# здесь:
http://www.codeproject.com/Articles/388 ... e-database
Похожий подход сделает то, что мне нужно, но мне трудно преобразовать его в Java, поэтому, если кто-нибудь может мне помочь Я был бы признателен. Я думаю, что большинство проблем связано с прямым порядком байтов/младшим порядком байтов, поскольку я думаю, что Java всегда будет использовать обратный порядок байтов, а не тот, который используется в собственной ОС? Не совсем уверен, как с этим справиться.
Моя идея в основном та же: сгенерировать UUID с помощью UUID.randomUUID(), а затем заменить MSB полученного идентификатора на System.currentTimeMillis(). Я не уверен в одном: сколько байтов мне понадобится для этого, потому что я думаю, что мы можем представить текущую временную метку с помощью 6 байтов, а часть UUID, посвященная временной метке, использует 7,5 байтов:
Код: Выделить всё
time_low = 4*
time_mid = 2*
time_high_and_version = 2* (1 byte for UUI algorithm version)
- Это может работать хорошо, когда количество клиентов известно, но это не так. Это означает, что мне нужно будет генерировать случайные идентификаторы для каждого клиента, чтобы сделать их максимально уникальными, это будет означать 36 символов для префикса идентификатора клиента. и еще немало для последовательной части, это означает, что первичные ключи длиной более 50 символов не являются хорошей идеей.
- Это не решит проблему, которую я пытаюсь решить, а именно наличие последовательных первичных ключей: как только вы начнете вставлять записи от разных клиентов в одну и ту же таблицу, вставки больше не будут последовательными, и вы пострадаете в производительности.
Мобильная версия