|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Хотел спросить совета, раз взялся за переделку структуры базы с нуля: какого типа поле использовать для идентификации "уникальности" записи при репликации? Пока на ум приходят два варианта: хэш и GUID. Какие минусы и плюсы? Может есть еще? ================= Док. Win7 Ultim x64, Deb 7.6 i386 (Deb 8.2 i386): FB 2.5.5.26952, диалект 3, SS, Lazarus 1.5; FPC 2.7.1, UIB ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 01:32 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Док, GUID, однозначно. Правда, буйная фантазия рождает еще один вариант источника генерации уникального ключа для гео-удаленных друг от друга серверов: gps координаты + точное время со спутника с PPS сигналом. Это уже для сильно специфических задач, где ключ служит не только уникальности, но и точному указанию источника репликации в режимах мастер-мастер. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 01:55 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Док, Если идентификаторы в отдельной таблице хранить и если у каждого сервера есть уникальный Id, то можно ServerId + RecordId. Например, если количество серверов меньше $FF и уникальных записей в системе меньше $FFFFFF, то уникальный Id в Int поместится. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 04:01 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
А с практической точки зрения есть преимущества использования интегера супротив гуида? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 09:35 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
_Док_, размер вдвое меньше. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 09:38 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
DBConstructor, поправочка: long long int (__int64) вдвое и (long int) вчетверо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 09:40 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
_Док_А с практической точки зрения есть преимущества использования интегера супротив гуида? делали распределенку на составных ключах ID_NODE*10 000 000 000 + gen_id(table_id) 1. очень удобно видеть откуда пришло. и группировать по источникам. 2. делали репликацию по диапазонам с перекрытием (insert if exists) было дешевле закачать лишний день, чем геморроится с логами изменений. 3. оно человекочитаемо, это много раз спасало душевное здоровье на этапе запуска ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 09:45 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
_Док_А с практической точки зрения есть преимущества использования интегера супротив гуида? последовательные integer лучше сжимаются. Размер индекса много меньше. Скорость вставки меньше деградирует. Вот если бы GUID был последовательный тогда преимуществ было бы меньше. Это кстати обсуждалось не так давно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 10:44 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Симонов ДенисСкорость вставки меньше деградирует. Или больше, если параллельные коннекты встают в очередь за эксклюзивным локом на одну и ту же страницу индекса. Бросьте, у Дока не те нагрузки чтобы такие мелочи роляли. С гуидом спокойнее: конфликты по ключам хоть и имеют (теоретически) отличную от нуля вероятность, неспособны в один неприятный момент стать массовым явлением. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 13:33 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
На гуиде и остановлюсь. Спасибо всем за участие! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 14:52 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
хм .. я тут в результате рукоблудия в стиле Паши некоторых экспериментов интересные вещи для себя открыл :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Дак что там насчет размера индекса говорилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:00 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Чисто для информации: HASH() возвращает INTEGER, а не BIGINT. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:07 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЧисто для информации: HASH() возвращает INTEGER, а не BIGINT. И давно ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:36 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, из последней доки FB 2.5HASH () Функция возвращает хэш-значение входной строки. Эта функция полностью поддерживает текстовые BLOB любой длины и с любым набором символов. Тип возвращаемого значения BIGINT . Доступна для DSQL, PSQL. Синтаксис: HASH(< строка >) Кстати, создал по индексу на каждое из сравниваемых полей. В селекте индекс на UUID не подхватывается... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:38 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Ваня СусанинИ давно ? Упс... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:48 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Докиндекс на UUID не подхватывается...Не надо "ля-ля"! :-) Код: plaintext 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.
Output: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:52 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Ваня Сусанин, Паш, ты прав. mea culpa я кастовал поле к строке функцией UUID_TO_CHAR ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:06 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
ДокДак что там насчет размера индекса говорилось? Нельзя впихнуть невпихуемое. Хэш не уникален. UUID - 128 bit, bigint - 64. Вылезет один единственный раз в жизни. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 08:05 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
pastor, предвосхитил мой вопрос по поводу коллизий :) Извиняюсь за ламерство, но как в запросе найти запись по гуиду? Если кастовать к чару, то не подхватывается индекс. Даже в параметриз(ир)ованном запросе ИБЕ ругается Incompatible column/host variable data type. Dynamic SQL Error. SQL error code = -303. arithmetic exception, numeric overflow, or string truncation. string right truncation. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 10:27 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Док, либо ты где-то перемудрил, либо я чего-то не понимаю. Код: plsql 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.
Результат: Код: plain 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 11:32 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Докpastor, предвосхитил мой вопрос по поводу коллизий :) Извиняюсь за ламерство, но как в запросе найти запись по гуиду? Если кастовать к чару, то не подхватывается индекс. Даже в параметриз(ир)ованном запросе ИБЕ ругается Incompatible column/host variable data type. Dynamic SQL Error. SQL error code = -303. arithmetic exception, numeric overflow, or string truncation. string right truncation. поэтому я, как заевшая пластинка, продолжаю советовать bigint с диапазонами UUID мы используем для связи с потусторонними источниками. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 11:36 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
Hello, Pastor! You wrote on 24 декабря 2015 г. 11:39:29: Pastor> продолжаю советовать bigint с диапазонами+500! зы: у нас больше 30 серверов участвуют в репликации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 11:40 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
pastorпоэтому я, как заевшая пластинка, продолжаю советовать bigint с диапазонами Подозреваю, что это для промышленной БД с бесплатно прилагающимся к ней админом. У меня же предполагаемый объем 10-30 тыс записей в год, причем у большинства юзверей база может "гулять" с флешки на десктоп и обратно. DBConstructor , У тебя исходные условия не те. Попробуй сделать ПК обычным автоинкрементом и ищи запись по гуиду в кляузе WHERE. У меня все время план идет натуралом. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 12:55 |
|
Выбор идентификатора записи для комфортной репликации
|
|||
---|---|---|---|
#18+
ДокУ меня все время план идет натуралом. Потому что надо использовать параметры, а не литералы. Или, если уж использовать литералы, так шестнадцатиричные. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 13:06 |
|
|
start [/forum/topic.php?fid=40&msg=39136887&tid=1562431]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 405ms |
0 / 0 |