Нужно понять, как работает этот механизм платформы по изменению версии данных.
На данный момент мне известно, что версия данных это реквизит с типом строка: "AAAAXwAAAAA=".
Строка закодирована по алгоритму base64. Если применить обратную функцию Base64Значение(), то получим двоичные данные:
"00 00 00 5F 00 00 00 00".
При каждой записи меняются первые 8 цифр этого шестнадцатеричного выражения, то есть при следующей записи будет:
"00 00 00 60 00 00 00 00".
Вопрос, для чего последние 8 цифр? Может быть они меняются при каком-то обмене? При загрузке из файла всё равно меняются только первые 8 цифр. А может быть вообще эта запись хранит больше информации, чем предполагаю?
На данный момент мне известно, что версия данных это реквизит с типом строка: "AAAAXwAAAAA=".
Строка закодирована по алгоритму base64. Если применить обратную функцию Base64Значение(), то получим двоичные данные:
"00 00 00 5F 00 00 00 00".
При каждой записи меняются первые 8 цифр этого шестнадцатеричного выражения, то есть при следующей записи будет:
"00 00 00 60 00 00 00 00".
Вопрос, для чего последние 8 цифр? Может быть они меняются при каком-то обмене? При загрузке из файла всё равно меняются только первые 8 цифр. А может быть вообще эта запись хранит больше информации, чем предполагаю?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Это возрастающий счетчик записи. Единственная операция, которая для него имеет смысл - это сравнение на больше/меньше, чтобы понять какая версия старше, а какая - младше. "Последние 8 цифр" это хранение в little-endian. В MSSQL там, например, вообще timestamp.
Сильно тебе это знание помогло?
Нужно понять
Это возрастающий счетчик записи. Единственная операция, которая для него имеет смысл - это сравнение на больше/меньше, чтобы понять какая версия старше, а какая - младше. "Последние 8 цифр" это хранение в little-endian. В MSSQL там, например, вообще timestamp.
Сильно тебе это знание помогло?
(8)
"Последние 8 цифр" - это старшее двойное слово значения. Начнет заполнятся, когда будет заполнено младшее. При представлении в little-endian после "FF FF FF FF 00 00 00 00" при инкременте на единицу пойдет "00 00 00 00 00 00 00 01".
Что такое "двойное слово", "инкремент" и "единица" объяснять уж не буду, прости.
Читал, не понял
Бедааааа...
"Последние 8 цифр" - это старшее двойное слово значения. Начнет заполнятся, когда будет заполнено младшее. При представлении в little-endian после "FF FF FF FF 00 00 00 00" при инкременте на единицу пойдет "00 00 00 00 00 00 00 01".
Что такое "двойное слово", "инкремент" и "единица" объяснять уж не буду, прости.
(3) У версии вообще единственное назначение - определить, что объект был изменен и твоя копия (неважно какая, объект в памяти, данные в другой базе) протухла. Для этого версию даже из base64 доставать не надо, сравниваешь, получаешь неравенство и всё. Поэтому и реализация такая.
Можно построить самописную оптимистичную блокировку, например. В нетиповых встречал.
Можно построить самописную оптимистичную блокировку, например. В нетиповых встречал.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот