Генерация глобально уникального идентификатора в Java

Как уже говорили другие, вам необходимо реализовать Bucket Policy , такую ​​как эта:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadForGetBucketObjects", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{NAME_OF_YOUR_BUCKET_HERE}/*" } ] }

Это можно сделать в консоли AWS. выбрав Bucket , затем Permissions , затем Bucket Policy . Похоже, @Milan C. указывает, как объявить это в файле serverless.yml .

12
задан Community 23 May 2017 в 12:10
поделиться

4 ответа

Вполне уверенные UUID "достаточно хороши". Существует 340,282,366,920,938,463,463,374,607,431,770,000,000 доступных UUID.

http://www.wilybeagle.com/guid_store/guid_explain.htm

"Для рассматривания этих чисел в истинном свете ежегодный риск того, чтобы быть пораженным метеоритом, как оценивается, является одним шансом в 17 миллиардах, который означает, что вероятность - приблизительно 0,00000000006 (6 × 10−11), эквивалентный разногласиям создания нескольких десятков из триллионов UUID через год и наличия одного дубликата. Другими словами, только после генерации 1 миллиарда UUID каждую секунду в течение следующих 100 лет, вероятности создания всего один дубликат составил бы приблизительно 50%. Вероятность одного дубликата составила бы приблизительно 50%, если каждый человек на земле владеет 600 миллионами UUID"

http://en.wikipedia.org/wiki/Universally_Unique_Identifier

31
ответ дан 2 December 2019 в 04:34
поделиться
public class UniqueID {
    private static long startTime = System.currentTimeMillis();
    private static long id;

    public static synchronized String getUniqueID() {
        return "id." + startTime + "." + id++;
    }
}
1
ответ дан 2 December 2019 в 04:34
поделиться

Если это должно быть уникально на пк: Вы могли, вероятно, использовать (System.currentTimeMillis() << 4) | (staticCounter++ & 15) или что-то как этот.

Это позволило бы Вам генерировать 16 в мс. Если Вы нуждаетесь в больше, смещаетесь 5 и и это с 31...

если это должно быть уникально через несколько ПК, необходимо также объединиться в MAC-адресе основной сетевой платы.

править: разъясниться

private static int staticCounter=0;
private final int nBits=4;
public long getUnique() {
    return (currentTimeMillis() << nBits) | (staticCounter++ & 2^nBits-1);
}

и измените nBits на квадратный корень наибольшего числа, которое необходимо должны быть генерировать в мс.

Это в конечном счете перевернется. Вероятно, 20 лет или что-то с nBits в 4.

1
ответ дан 2 December 2019 в 04:34
поделиться

Из памяти RMI удаленные пакеты содержит генератор UUID. Я не знаю, стоит ли это изучить.

Когда я должен был генерировать их, я обычно использую MD5 hashsum времени текущей даты, имени пользователя и IP-адреса компьютера. В основном идея состоит в том, чтобы взять все, что можно узнать о компьютере/человеке и затем генерировать хеш MD5 этой информации.

Это работает действительно хорошо и невероятно быстро (после того как Вы инициализировали MessageDigest впервые).

0
ответ дан 2 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: