|
структура blobID
|
|||
---|---|---|---|
#18+
Здравствуйте. смотрю экспертом страницы базы. blobID определяется как 16.332.61884.13 откидываем relationid. Далее идут 4 байта. $85 64 8C 03 Если их прочитать как два слова получится если все правильно путаю: $64 85 и $03 8C Первый вопрос возник что есть 61884? В бинарном виде это будет так : 01100100 10000101 00000011 10001100 если блоб ид (16.332.61884.13) представить в бинарном виде: 10000 101001100 1111000110111100 1101 Ни одной бинарной последовательности blobID (16.332.61884.13) не нашел в ее 16ричном представлении. А может плохо искал. Как прочитать блобИД? Чтобы представить в виде НомерРР.Номер слота на РР.Номер записи на странице вот тут вот есть на 12 странице описание db_key. http://www.firebirdsql.org/file/community/conference-2014/pdf/22_tips_firebird_system_tables.pdf Но вот относительно 61884 ничего не нашел. В описании db_key трехкомпонентный. Эксперт же показывает 4 числа. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2015, 20:09 |
|
структура blobID
|
|||
---|---|---|---|
#18+
sergqсмотрю экспертом страницы базы. blobID определяется как 16.332.61884.13 о каком эксперте речь? Если IBE, то спроси в соответствующем подфоруме что за хитрый вывод такой. sergqоткидываем relationid. Далее идут 4 байта. всего 8 байт, relationid двухбайтовый. Должно остаться 6 байт, а не 4. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2015, 20:50 |
|
структура blobID
|
|||
---|---|---|---|
#18+
dimitr, хорошо. пусть будет 6 байт нашел такую структуру public: USHORT bid_relation_id; /* Relation id (or null) */ private: UCHAR bid_reserved_for_relation; /* Reserved for future expansion of relation space. */ UCHAR bid_number_up; // Upper byte of 40-bit record number ULONG bid_number; // Lower bytes of 40-bit record number // or 32-bit temporary ID of blob or array те получается у нас вот так: $00 00 85 64 8C 03 Первый ноль - Reserved for future expansion of relation space. второй - Upper byte of 40-bit record number все остальное Lower bytes of 40-bit record number как ни крутил не получил из этого набора байт ни номер PP равным 16, ни номер слота равный 332, ни номер записи равный 13 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2015, 21:30 |
|
структура blobID
|
|||
---|---|---|---|
#18+
sergq, в том же RecordNumber.h найди метод decompose() - он превращает номер записи в ppseq/slot/line records_per_page и data_pages_per_pointer_page для заданной базы константы, вычисляются через размер страницы (см. maxRecsPerDP и dataPagesPerPP в ods.cpp) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2015, 21:37 |
|
структура blobID
|
|||
---|---|---|---|
#18+
dimitr, не силен в С ) Код: plaintext 1.
это я так понимаю остаток от деления. для вот этого вот blobid $81 00 00 00 85 64 8C 03 line равно 13. судя по тому, что показывает IBE. Но что есть VALUE? подозреваю, что тип его SINT64. Но точно не последние 4 байта. слишком большое число для данной формулы) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2015, 01:25 |
|
структура blobID
|
|||
---|---|---|---|
#18+
Вот что показывает эксперт: Код: pascal 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2015, 05:29 |
|
структура blobID
|
|||
---|---|---|---|
#18+
sergqНо что есть VALUE? подозреваю, что тип его SINT64. Но точно не последние 4 байта. слишком большое число для данной формулы) Это последние 5 байт - они и есть value. 5-й байт окажется задействованным только в очень больших базах, так что в экспериментах с обычными базами достаточно взять 4 последние байта. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2015, 05:48 |
|
структура blobID
|
|||
---|---|---|---|
#18+
IBExpert, с maxRecsPerDP вроде разобрался. а вот с dataPagesPerPP Код: plaintext 1. 2.
для 16к страницы получается так Код: plaintext 1. 2.
по первой строке получается 3270. Это чего? судя по умножению на 8 это биты Последнюю строчку не допонял. Тильда это вроде как NOT. & - AND Если переписать как 3270 and (not 7) - тоже маловато. да и ересь вроде как написана. правильный ответ (то, что показывает IBE) - 3847 И такой вопрос. ЗАчем на PP в конце порядка 960 байт забито $55? Почему целый килобайт не используется? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2015, 18:45 |
|
структура blobID
|
|||
---|---|---|---|
#18+
sergqЕсли переписать как 3270 and (not 7) - тоже маловато. да и ересь вроде как написана. правильный ответ (то, что показывает IBE) - 3847 правильный ответ - 3264 sergqЗАчем на PP в конце порядка 960 байт забито $55? Почему целый килобайт не используется? в конце PP флаги для каждой DP лежат, они очень даже используются ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2015, 19:19 |
|
структура blobID
|
|||
---|---|---|---|
#18+
dimitrsergqЕсли переписать как 3270 and (not 7) - тоже маловато. да и ересь вроде как написана. правильный ответ (то, что показывает IBE) - 3847 правильный ответ - 3264 sergqЗАчем на PP в конце порядка 960 байт забито $55? Почему целый килобайт не используется? в конце PP флаги для каждой DP лежат, они очень даже используются это как раз 3270 and (not 7) )) но ведь dataPagesPerPP - сколько указателей на DP умещается на одной PP? IBE показывает , что записей на странице -3847 И active slots на PP - 3847. почему тогда 3264? флаги это из оперы and a 8 bit control field (PPG_DP_BITS_NUM) ? какая структура отвечает за флаги? и как их найти (смещение)? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2015, 19:32 |
|
структура blobID
|
|||
---|---|---|---|
#18+
sergqно ведь dataPagesPerPP - сколько указателей на DP умещается на одной PP? IBE показывает , что записей на странице -3847 И active slots на PP - 3847. почему тогда 3264? А ты какую базу ковыряешь, каким сервером созданную? Раньше для каждой DP нужно было 32+2 бита флагов. Видимо, тройка уже 8 бит под флаги выделяет, как dimitr говорит. Это в Database Inside еще не учтено. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2015, 05:56 |
|
структура blobID
|
|||
---|---|---|---|
#18+
sergqфлаги это из оперы and a 8 bit control field (PPG_DP_BITS_NUM) ? какая структура отвечает за флаги? и как их найти (смещение)? у тебя же код на руках, быстрее найти чем спрашивать. Сразу за массивом номеров DP (ppg_page) идет массив флагов. В старых ODS было геморройно их вычленять (каждый байт содержал флаги четырех DP), в ODS 12 проще - там ровно один байт на DP: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2015, 10:52 |
|
структура blobID
|
|||
---|---|---|---|
#18+
IBExpertsergqно ведь dataPagesPerPP - сколько указателей на DP умещается на одной PP? IBE показывает , что записей на странице -3847 И active slots на PP - 3847. почему тогда 3264? А ты какую базу ковыряешь, каким сервером созданную? Раньше для каждой DP нужно было 32+2 бита флагов. Видимо, тройка уже 8 бит под флаги выделяет, как dimitr говорит. Это в Database Inside еще не учтено. ODS 11.2. страница 16k, pp.active slots = 3847. никак не 3264 ) и все данные, на которые ссылаются слоты выше 3264 отображаются в Database Inside ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2015, 16:12 |
|
|
start [/forum/topic.php?fid=40&fpage=72&tid=1562663]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 380ms |
0 / 0 |