powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / транзакционный словарь
42 сообщений из 42, показаны все 2 страниц
транзакционный словарь
    #39105944
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,
необходимо развернуть на виртуалке некий софт, вроде кивалью стораджа. Использоваться будет для генерации коротких uidов в контексте приложения.

Какой софт порекомендуете?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106356
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.вроде кивалью стораджа.
чё это за мутота?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106663
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВDenis.вроде кивалью стораджа.
чё это за мутота?Key-value storage
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106667
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЕвгенийВпропущено...

чё это за мутота?Key-value storage
Неужто без хрустального шара догадался? Я - нет
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106668
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Коллеги,
необходимо развернуть на виртуалке некий софт, вроде кивалью стораджа. Использоваться будет для генерации коротких uidов в контексте приложения.

Какой софт порекомендуете?Зачем для этого какой-то софт разворачивать? 10 строк кода поверх RNGCryptoServiceProvider .
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106840
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЗачем для этого какой-то софт разворачивать? 10 строк кода поверх RNGCryptoServiceProvider .
А Guid.NewGuid() не гадится?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106888
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЕвгенийВпропущено...

чё это за мутота?Key-value storage

в таком случае в оригинале должно быть "кивалью сторагэ"
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106977
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВskyANAЗачем для этого какой-то софт разворачивать? 10 строк кода поверх RNGCryptoServiceProvider .
А Guid.NewGuid() не гадится?Это ТСа надо спросить, что он имел в виду под "короткими uidами".
...
Рейтинг: 0 / 0
транзакционный словарь
    #39106979
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WinnipuhskyANAпропущено...
Key-value storage

в таком случае в оригинале должно быть "кивалью сторагэ"Почему? лухари вилаж?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107591
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
идея в том что нужно генерировать uid длинной, скажем, 5-6 символов, с заданным словарем. В моем случае большие и маленькие английские буквы. Нужно быть уверенным что сочетание не повторялось, для этого я сейчас генерирую uid, пытаюсь его сохранить в azuretablestorage, в случае неуспеха(такой уже был) генерирую новый и так далее. Но с азура хочу свинчивать и думаю над альтернативой.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107614
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107623
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Нужно быть уверенным что сочетание не повторялось, для этого я сейчас генерирую uid, пытаюсь его сохранить в azuretablestorage, в случае неуспеха(такой уже был) генерирую новый и так далее.
Может наоборот проблему порешать? Сервер выдает uid по запросу клиента? В принципе тут счетчика достаточно.
Такой сервер написать - делов на полдня.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107628
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107630
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

а разве там можно использовать свой словарь и имя будет гарантированно уникальным вне зависимости от времени жизни процесса?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107632
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

так а сервер откуда его возьмет?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107647
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Dima T,

так а сервер откуда его возьмет?
Сгенерит.

Как я понял ты получение ID порешал нездоровым образом: клиент генерит ID, а потом сервер проверяет что этот ID не был ранее использован.
Обычно сервер выдает ID и следит чтобы не выдать два одинаковых. Простейшее решение: счетчик на сервере - отдал значение клиенту, сделал +1. Никаких хранилищ не надо. Надо хранить только текущее значение счетчика.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107667
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TDenis.Dima T,

так а сервер откуда его возьмет?
Сгенерит.

Как я понял ты получение ID порешал нездоровым образом: клиент генерит ID, а потом сервер проверяет что этот ID не был ранее использован.
Обычно сервер выдает ID и следит чтобы не выдать два одинаковых. Простейшее решение: счетчик на сервере - отдал значение клиенту, сделал +1. Никаких хранилищ не надо. Надо хранить только текущее значение счетчика.
Здесь сервер и клиент - вопрос точки зрения. да. У меня отдает сервере айдишники, но далее мы залезаем внутрь сервера и смотрим, а как он эти айдишникики генерирует. А генерирует он их так что придумывает вариант и проверяет был ли такой уже или нет. Просто инкремент не подходит так как айдишник нужен из произвольного алфавита. Суть - ссылка автоматически автоматизирующая пользователя в системе и доставляемая через смс. Он а должна быть короткой. Она не должна быть легко перебираемой. Пример: 'http://service.ru/aS6h7zx'
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107680
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автоматизирующая = авторизующая
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107901
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.идея в том что нужно генерировать uid длинной, скажем, 5-6 символов, с заданным словарем. В моем случае большие и маленькие английские буквы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
namespace UniqueIdGeneration
{
    using System;
    using System.Security.Cryptography;
    using System.Text;

    class Program
    {
        static string GenerateUniqueId(int size, string symbols)
        {
            char[] chars = symbols.ToCharArray();
            var data = new byte[1];
            var crypto = new RNGCryptoServiceProvider();
            crypto.GetNonZeroBytes(data);
            data = new byte[size];
            crypto.GetNonZeroBytes(data);
            var result = new StringBuilder(size);

            foreach (byte b in data)
            {
                result.Append(chars[b % (chars.Length - 1)]);
            }

            return result.ToString();
        }

        static void Main(string[] args)
        {
            var size = 6;
            var symbols = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

            for (int i = 0; i < 24; i++)
            {
                Console.WriteLine(GenerateUniqueId(size, symbols));
            }

            Console.ReadKey();
        }
    }
}
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107942
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

так он же не гарантирует уникальность?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107945
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Просто инкремент не подходит так как айдишник нужен из произвольного алфавита.
Чуть сложнее: заранее генери список произвольных заведомо уникальных ID, запиши их в файл, счетчик будет указывать на номер ID в файле. По мере окончания файла генерить следующую порцию. Правда тут возникает возможность утечки будущих ID если сервис поломают и файл утащат.
Denis.Суть - ссылка автоматически автоматизирующая пользователя в системе и доставляемая через смс. Он а должна быть короткой. Она не должна быть легко перебираемой. Пример: 'http://service.ru/aS6h7zx'
Я так понимаю что при отправке СМС это ID попадает в какую-то БД сервиса, почему бы по ней не проверять? Если не попадает - создать таблицу в БД и ее задействовать для проверок. Сервис какой БД пользуется?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107957
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.так он же не гарантирует уникальность?
RNGCryptoServiceProvider гаратнтирует случайность (randomness), а уникальность не гарантирует даже Guid.NewGuid()
...
Рейтинг: 0 / 0
транзакционный словарь
    #39107996
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronRNGCryptoServiceProvider гаратнтирует случайность (randomness),

Он гарантирует лишь то, что злому бородатому дядьке, который имеет некоторое множество ранее последовательно сгенерированных значений, будет трудно повторить последовательность, которую вы сгенерируете в будущем.
Axeleronа уникальность не гарантирует даже Guid.NewGuid()
Это так, но есть нюанс .
Denis.так он же не гарантирует уникальность?
Полную уникальность гарантирует только монотомно возрастающая/убывающая последовательность.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108020
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.skyANA,

так он же не гарантирует уникальность?Кто он? Этот метод, или RNGCryptoServiceProvider?

RNGCryptoServiceProvider нет, а метод вполне. Погуглите.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108036
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К примеру у меня сейчас в БД на текущий момент уже 46653 записи, повторений не наблюдается.

А сколько у Вас пользователей? Сколько предполагаете будет сгенерировано ссылок?

P.S.: ну и Вы всегда можете добавить дополнительную проверку.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108049
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAК примеру у меня сейчас в БД на текущий момент уже 46653 записи, повторений не наблюдается.
тест
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        static void Main(string[] args) {
            var size = 6;
            var symbols = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

            var d = new Dictionary<String, Byte>();
            try {
                while(true) {
                    d.Add(GenerateUniqueId(size, symbols), 0);
                }
            } catch(Exception e) {
                Console.WriteLine("Count: " + d.Count);
                Console.WriteLine(e.Message);
            }

            Console.ReadKey();
        }


Раз 10 позапускал, от 70 до 500 тыс. уникальных.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108100
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

вот это запустите

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 static void Main(string[] args)
        {
            const int SIZE = 2;
            const string SYMBOLS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            Console.WriteLine("combinations count: " + Math.Pow(SYMBOLS.Length, SIZE));
            var dict = new Dictionary<string, object>();
            while (true)
            {
                try
                {
                    dict.Add(GenerateUniqueId(SIZE, SYMBOLS), null);
                }
                catch
                {
                    Console.WriteLine("duplicate found on iteration " + dict.Count + 1);
                    break;
                }
            }

            Console.ReadKey();
        }
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108110
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне не нужно "почти никогда" или "крайне редко". Мне нужна гарантированная уникальность и вопрос не в том как лучше создать uid. вопрос в проверке его уникальности. Кроме как сохранять ранее сгенерированные я вариантов не вижу. И я знаю что можно проверять просто констрейнтом в базе, я знаю что со временем время генерирования uidов будет расти и последний доступный будет искаться "вечность". Здесь право не в этом вопрос. Нужен очень быстрый компактный потокобезопасный сторадж с легкой установкой поддержкой и хорошей либой в нугете для его пользования. Про беркли говорили, видимо именно то что мне и нужно. Только для мня не понятно лучший ли это выбор в контексте именно моей задачи и нашей платформы. (.net)
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108120
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANADenis.skyANA,

так он же не гарантирует уникальность?Кто он? Этот метод, или RNGCryptoServiceProvider?

RNGCryptoServiceProvider нет, а метод вполне . Погуглите.

"вполне" не проходит, должно быть да или нет
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108143
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БерклиДБ примитивный до безобразия. Под C# адаптирован
Можешь SQlite взять, тоже есть обертка под C#

Ты бы требования озвучил. Сколько максимально должно быть сгенерировано ID в секунду/день/месяц/год. Может вообще не надо заморачиваться: просто сделать файлик, при старте грузить его в Dictionary а при выдаче дописывать в Dictionary и в файл.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108151
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

файлик с транзакционностью и поиском это не кое-что кое чье :). Стебелек, не иначе.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108177
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРаз 10 позапускал, от 70 до 500 тыс. уникальных.
присобачь еще "0123456789_" к symbols и повтори эксперимент)
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108202
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще надо
Код: c#
1.
result.Append(chars[b % (chars.Length)]);


а не
Код: c#
1.
result.Append(chars[b % (chars.Length - 1)]);



так, как остаемся без 'Z'.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108205
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и к чему GetNonZeroBytes?
Зачем оставаться без 0?
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108235
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Dima T,

файлик с транзакционностью и поиском это не кое-что кое чье :). Стебелек, не иначе.
Если что: я про Dictionary, а файлик на случай перезапусков проги (для инициализации). До миллиона значений Dictionary легко потянет.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108244
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TDenis.Dima T,

файлик с транзакционностью и поиском это не кое-что кое чье :). Стебелек, не иначе.
Если что: я про Dictionary, а файлик на случай перезапусков проги (для инициализации). До миллиона значений Dictionary легко потянет.
так а что будет если сбой будет или я аппсервер передеплою или хз что еще. Если айдишник сгенерен, это должно остаться на диске. Мне нужно персистить каждый айдишник. Сначала персист - потом "вот тебе уникальный айдишник".
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108257
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.так а что будет если сбой будет или я аппсервер передеплою или хз что еще.
Для того и файлик. Это бэкап выданных ID. Вроде понятно написал
авторпри старте грузить его в Dictionary а при выдаче дописывать в Dictionary и в файл
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108274
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ну велосипед. Тем более у меня сейчас там миллионов 5 уже записей.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108280
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под 5 млн - бери любую СУБД, какая больше нравится. Делаешь таблицу где первичный ключ твой ID. Дальше просто вставка в таблицу. сохранилось - отдаешь ID дальше.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108293
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

делал изначально так на sqlazure. Медленно. переделал на tablestorage - быстро
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108349
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВДа и к чему GetNonZeroBytes?
Зачем оставаться без 0?0 на кратных знаменателю числах.
...
Рейтинг: 0 / 0
транзакционный словарь
    #39108525
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЕвгенийВДа и к чему GetNonZeroBytes?
Зачем оставаться без 0?0 на кратных знаменателю числах.
Множество 1-255 менее мощно чем 0-255 со всеми вытекающими.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / транзакционный словарь
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]