Extensible Storage Engine
От: Artour A. Bakiev  
Дата: 25.04.07 14:07
Оценка: 190 (9)
Статья:
Extensible Storage Engine
Автор(ы): Artour A. Bakiev
Дата: 25.04.2007
В этой статье дается обзор технологии “Extensible Storage Engine”. Хотя технология опубликована немногим более года назад – новой её можно назвать только условно. Она использовалась при создании таких продуктов, как Active Directory и Exchange 2000, но до недавнего времени не была известна широкому кругу разработчиков. В узком же кругу тех, кто с ней сталкивался, она была известна под именем “JET Blue”.
Кроме того, статья будет интересна желающим узнать, как организована работа СУБД на низком уровне.


Авторы:
Artour A. Bakiev

Аннотация:
В этой статье дается обзор технологии "Extensible Storage Engine". Хотя технология опубликована немногим более года назад — новой её можно назвать только условно. Она использовалась при создании таких продуктов, как Active Directory и Exchange 2000, но до недавнего времени не была известна широкому кругу разработчиков. В узком же кругу тех, кто с ней сталкивался, она была известна под именем "JET Blue".
Кроме того, статья будет интересна желающим узнать, как организована работа СУБД на низком уровне.
Re: Extensible Storage Engine
От: shelkovnikov Россия  
Дата: 26.04.07 02:55
Оценка: -1
Здравствуйте, Artour A. Bakiev, Вы писали:

AAB>Статья:

AAB>Extensible Storage Engine
Автор(ы): Artour A. Bakiev
Дата: 25.04.2007
В этой статье дается обзор технологии “Extensible Storage Engine”. Хотя технология опубликована немногим более года назад – новой её можно назвать только условно. Она использовалась при создании таких продуктов, как Active Directory и Exchange 2000, но до недавнего времени не была известна широкому кругу разработчиков. В узком же кругу тех, кто с ней сталкивался, она была известна под именем “JET Blue”.
Кроме того, статья будет интересна желающим узнать, как организована работа СУБД на низком уровне.


по ссылке не удается попасть на статью
удалось по этой
Автор(ы): Artour A. Bakiev
Дата: 25.04.2007
В этой статье дается обзор технологии “Extensible Storage Engine”. Хотя технология опубликована немногим более года назад – новой её можно назвать только условно. Она использовалась при создании таких продуктов, как Active Directory и Exchange 2000, но до недавнего времени не была известна широкому кругу разработчиков. В узком же кругу тех, кто с ней сталкивался, она была известна под именем “JET Blue”.
Кроме того, статья будет интересна желающим узнать, как организована работа СУБД на низком уровне.
Re: Extensible Storage Engine
От: Michael Rusakov https://www.wincatalog.com
Дата: 26.06.07 08:06
Оценка:
Здравствуйте, Artour A. Bakiev, Вы писали:

AAB>Статья:

Большое спасибо за статью, было очень интересно почитать.

Я хотел добавить про SQLite. Мне известно как минимум две успешных коммерческих разрабоки (и готовящаяся к выходу третья) на ее основе. А также новый продукт от Google — Google Gear тоже использует SQLite. И мне почему-то кажется, что после того, как на SQLite обратил внимание Google, дела у них пойдут стремительно "в гору". Хотя и сейчас, на мой взгляд, всё в порядке.

Кстати, насколько я понял, в JET Blue нет возможности выполнять SQL запросы? Это я к тому, что заменять им уже используемые "легковесные" Firebird и SQLite будет весьма затратно.
WinCatalog — Disk Catalog Software for Windows
Re: Extensible Storage Engine
От: FractalizeR  
Дата: 28.06.07 14:58
Оценка:
Отличная статья, я только не понял, что такого Extensible в этом Storage Engine? Он и правда расширяемый? В каком плане?
Re: Extensible Storage Engine
От: CatWarrior Россия www.gaolife.hut1.ru
Дата: 01.07.07 13:18
Оценка:
Здравствуйте, Artour A. Bakiev, Вы писали:

А где можно раздобыть esent.h и esent.lib ?
если у кого есть скиньте пожалуйста на sonicCatTemp@list.ru
Re[2]: Extensible Storage Engine
От: CatWarrior Россия www.gaolife.hut1.ru
Дата: 01.07.07 17:58
Оценка:
Здравствуйте, CatWarrior, Вы писали:

Нашел в НЕМ

Отчепил Может кому понадобится :
Скачать
Re[3]: Extensible Storage Engine
От: CatWarrior Россия www.gaolife.hut1.ru
Дата: 02.07.07 04:35
Оценка:
Здравствуйте, CatWarrior, Вы писали:

Эх не работает, говорит что в esent.dll (которая у меня в C:\Windows\System32) нет функций типа JetBeginSessionA JetCreateDatabase. В SDK dll-ки вообще не было. Безбобразие.
Re[2]: Extensible Storage Engine
От: Artour Bakiev  
Дата: 04.07.07 13:48
Оценка:
Здравствуйте, Michael Rusakov, Вы писали:

MR>Кстати, насколько я понял, в JET Blue нет возможности выполнять SQL запросы? Это я к тому, что заменять им уже используемые "легковесные" Firebird и SQLite будет весьма затратно.


Совершенно верно. С помощью JET Blue невозможно выполнить SQL запрос (конечно, об этом следовало бы явно упомянуть в самой статье). Заменить один движок на другой будет не просто.
Re[2]: Extensible Storage Engine
От: Artour Bakiev  
Дата: 04.07.07 13:51
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Отличная статья, я только не понял, что такого Extensible в этом Storage Engine? Он и правда расширяемый? В каком плане?


Насколько я могу судить, слово "Extensible " в названии продукта — это скорее привлекающий внимание звучный термин, нежели описание каких-то особенностей данной технологии.
Re[2]: Extensible Storage Engine
От: Artour Bakiev  
Дата: 04.07.07 14:03
Оценка:
Здравствуйте, CatWarrior, Вы писали:

CW>Здравствуйте, Artour A. Bakiev, Вы писали:


CW>А где можно раздобыть esent.h и esent.lib ?


Думаю, проще всего получить эти файлы, установив один из последних SDK. Я не уверен, есть ли эти файлы в "Windows Server 2003 SP1 Platform SDK". Но они определённо поставляются с "Microsoft Platform SDK for Windows Server 2003 R2" (http://www.microsoft.com/downloads/details.aspx?FamilyID=0baf2b35-c656-4969-ace8-e4c0c0716adb&DisplayLang=en). Мicrosoft провёл очередную реорганизацию на своём сайте и потому в статье содержится неверная ссылка.
Re[4]: Extensible Storage Engine
От: Artour Bakiev  
Дата: 04.07.07 14:06
Оценка:
Здравствуйте, CatWarrior, Вы писали:

CW>Здравствуйте, CatWarrior, Вы писали:


CW>Эх не работает, говорит что в esent.dll (которая у меня в C:\Windows\System32) нет функций типа JetBeginSessionA JetCreateDatabase. В SDK dll-ки вообще не было. Безбобразие.


Определены ли директивы компилятора _UNICODE и UNICODE?
Re[5]: Extensible Storage Engine
От: CatWarrior Россия www.gaolife.hut1.ru
Дата: 05.07.07 12:01
Оценка:
Здравствуйте, Artour Bakiev, Вы писали:

AB>Здравствуйте, CatWarrior, Вы писали:


CW>>Здравствуйте, CatWarrior, Вы писали:


CW>>Эх не работает, говорит что в esent.dll (которая у меня в C:\Windows\System32) нет функций типа JetBeginSessionA JetCreateDatabase. В SDK dll-ки вообще не было. Безбобразие.


AB>Определены ли директивы компилятора _UNICODE и UNICODE?


указал /UNICODE, добавил (#define UNICODE #define _UNICODE). Использую VS 2005. Ошибка осталась, появляется при запуске.

The procedure entry point JetBeginSessionA could not be located in the dinamic link library ESENT.dll
Re[6]: Extensible Storage Engine
От: FractalizeR  
Дата: 05.07.07 12:57
Оценка:
CW>указал /UNICODE, добавил (#define UNICODE #define _UNICODE). Использую VS 2005. Ошибка осталась, появляется при запуске.

CW>The procedure entry point JetBeginSessionA could not be located in the dinamic link library ESENT.dll


Вы не хотите эту dll посмотреть чем-нибудь вроде tdump из комплекта Delphi? Сразу будет ясно, что там есть и чего нету.
Re: Extensible Storage Engine
От: Аноним  
Дата: 27.07.07 07:32
Оценка:
Здравствуйте, Artour A. Bakiev.

Подскажите пожалуйста а что это за esentprf.dll, имееющаяся в комплекте Windows 2000? Уж названия больно похожи.
Re[7]: Extensible Storage Engine
От: ZNick  
Дата: 22.08.07 07:36
Оценка:
Здравствуйте, FractalizeR, Вы писали:


CW>>указал /UNICODE, добавил (#define UNICODE #define _UNICODE). Использую VS 2005. Ошибка осталась, появляется при запуске.


CW>>The procedure entry point JetBeginSessionA could not be located in the dinamic link library ESENT.dll


FR>Вы не хотите эту dll посмотреть чем-нибудь вроде tdump из комплекта Delphi? Сразу будет ясно, что там есть и чего нету.


Я смотрел утилитой Depends из VS 2005... там не экспортятся ф-ции с суффиксом "A" и "W" хотя в MSDN явно написано что реализация через эти методы...
Система Win XP Prof. SP2.
Re: Vopros po JetMakeKey
От: AndrejC  
Дата: 27.08.07 16:10
Оценка:
Esli est' index iz neskol'kih kolonok (Long i Currency tipov) — kak pravil'no vyzvat' JetMakeKey neskol'ko raz? Izpol'zuja JetMakeKey i zatem JetSeek vsio vremia poluchaju oshibku: 1039 (JET_wrnSeekNotEqual), hotia i ispol'zuju JET_bitSeekGE
Re[8]: Extensible Storage Engine
От: mSerg Украина  
Дата: 28.08.07 17:15
Оценка:
Здравствуйте, ZNick, Вы писали:

ZN>Здравствуйте, FractalizeR, Вы писали:



CW>>>указал /UNICODE, добавил (#define UNICODE #define _UNICODE). Использую VS 2005. Ошибка осталась, появляется при запуске.


CW>>>The procedure entry point JetBeginSessionA could not be located in the dinamic link library ESENT.dll


FR>>Вы не хотите эту dll посмотреть чем-нибудь вроде tdump из комплекта Delphi? Сразу будет ясно, что там есть и чего нету.


ZN>Я смотрел утилитой Depends из VS 2005... там не экспортятся ф-ции с суффиксом "A" и "W" хотя в MSDN явно написано что реализация через эти методы...

ZN>Система Win XP Prof. SP2.

Перед
#include <esent.h>
нужно поставить
#define JET_VERSION 0x0501

Расшифровка из esent.h:

// JET_VERSION is similar to WINVER. It allows the most recent header to be used
// against older targets. Supported versions are:
// 0x0500 — Windows 2000
// 0x0501 — Windows XP
// 0x0502 — Windows 2003
// 0x0600 — Windows Vista

WBR, Serg Matskov
Re[2]: Extensible Storage Engine
От: Artour Bakiev  
Дата: 30.08.07 06:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Artour A. Bakiev.


А>Подскажите пожалуйста а что это за esentprf.dll, имееющаяся в комплекте Windows 2000? Уж названия больно похожи.


Честно говоря — не знаю — не встречался с таким файлом.

Название (а точнее, сочетание букв "prf" в названии) наводят на мысль, что это "ESE NT performance" — возможно, библиотека позволяет снимать показатели производительности для ESE движка, используя стандартный Performance Monitor.
Re[2]: Vopros po JetMakeKey
От: Artour Bakiev  
Дата: 30.08.07 06:57
Оценка:
Здравствуйте, AndrejC, Вы писали:

AC>Esli est' index iz neskol'kih kolonok (Long i Currency tipov) — kak pravil'no vyzvat' JetMakeKey neskol'ko raz? Izpol'zuja JetMakeKey i zatem JetSeek vsio vremia poluchaju oshibku: 1039 (JET_wrnSeekNotEqual), hotia i ispol'zuju JET_bitSeekGE


Боюсь, я не смогу помочь, не видя исходного кода. Пришлите, пожалуйста, исходный код — я попробую помочь Вам.
Re[3]: Vopros po JetMakeKey
От: AndrejC  
Дата: 30.08.07 07:32
Оценка:
Здравствуйте, Artour Bakiev, Вы писали:

AB>Здравствуйте, AndrejC, Вы писали:


AC>>Esli est' index iz neskol'kih kolonok (Long i Currency tipov) — kak pravil'no vyzvat' JetMakeKey neskol'ko raz? Izpol'zuja JetMakeKey i zatem JetSeek vsio vremia poluchaju oshibku: 1039 (JET_wrnSeekNotEqual), hotia i ispol'zuju JET_bitSeekGE


AB>Боюсь, я не смогу помочь, не видя исходного кода. Пришлите, пожалуйста, исходный код — я попробую помочь Вам.


Вот образец такого кода:

JET_ERR error;
long emptyCurrency = 0;
unsigned long emptyLong = 0;
unsigned long myID = 123;

error = JetSetCurrentIndex(sess_id, table_id, _T("index1"));
if (error)
throw new ApplicationException(error, JetErrorMessage(error));

// column1 is of type long
error = JetMakeKey(sess_id, table_id, &emptyLong, sizeof(emptyLong), JET_bitNewKey);
if (error)
throw new ApplicationException(error, JetErrorMessage(error));
// column2 is of type currency
error = JetMakeKey(sess_id, table_id, &emptyCurrency, sizeof(emptyCurrency), JET_bitNewKey);
if (error)
throw new ApplicationException(error, JetErrorMessage(error));
// column3 is of type long
error = JetMakeKey(sess_id, table_id, &emptyLong, sizeof(emptyLong), JET_bitNewKey);
if (error)
throw new ApplicationException(error, JetErrorMessage(error));
// column4 is of type long
error = JetMakeKey(sess_id, table_id, &myID, sizeof(emptyLong), JET_bitNewKey);
if (error)
throw new ApplicationException(error, JetErrorMessage(error));

error = JetSeek(sess_id, table_id, JET_bitSeekGE);

index1 (создан не мною) состоит из 4 колонок (long и currency типов). Значения в первых 3-х колонках не интересуют при поиске, поетому выставлены в 0, а значение 4-ой сравнивается со значением переменной myID. Но совершенно непонятно понимает ли в таком случае Engine, что я устанавливаю значения для каждой колонки отдельно, т.к. я не вижу возможности указать порядковый номер колонки для етого (вызовы JetMakeKey).

Возможен ли вообще при таком индексе корректный результат поиска или нужно иметь специальный индекс, состоящий только из 4-ой колонки?

Буду очень благодарен за ответ здесь. Писал Вам отделжно на email, но может не получили.
Re[3]: Vopros po JetMakeKey
От: AndrejC  
Дата: 31.08.07 08:13
Оценка:
Здравствуйте, Artour Bakiev, Вы писали:

AB>Здравствуйте, AndrejC, Вы писали:


AB>Боюсь, я не смогу помочь, не видя исходного кода. Пришлите, пожалуйста, исходный код — я попробую помочь Вам.


Добрый день,

Нужна ли Вам какая-то дополнительная информация с моей стороны по поводу приведенного кода? Попробовал искать в конференциях Microsoft, но результат нулевой.

Очень жду ответа.
Re[3]: Есть ли ответ по JetMakeKey?
От: AndrejC  
Дата: 19.09.07 06:09
Оценка:
Здравствуйте, Artour Bakiev, Вы писали:

AB>Боюсь, я не смогу помочь, не видя исходного кода. Пришлите, пожалуйста, исходный код — я попробую помочь Вам.


Потерял уже надежду дождаться ответа, хотя код запостил уже давно. Если он у Вас всё-таки появится — напишите мне на майл: andrejusc@yahoo.com

Спасибо,
Андрей
Re[4]: Есть ли ответ по JetMakeKey?
От: Artour Bakiev  
Дата: 17.02.08 19:40
Оценка:
Здравствуйте, AndrejC, Вы писали:

AC>Здравствуйте, Artour Bakiev, Вы писали:


AB>>Боюсь, я не смогу помочь, не видя исходного кода. Пришлите, пожалуйста, исходный код — я попробую помочь Вам.


AC>Потерял уже надежду дождаться ответа, хотя код запостил уже давно. Если он у Вас всё-таки появится — напишите мне на майл: andrejusc@yahoo.com



Понимаю, Андрей, что мой ответ опоздал на несколько месяцев. Прошу извинить великодушно. Подозреваю, что ответ Вам уже известен, но, руководствуюсь принципом — лучше поздно, чем никогда...

Мои опыты и чтение документации показали следующее:


    Одна из фраз, встречающаяся в MSDN при описании функции JetMakeKey звучит так: "A complete search key is built up in a series of JetMakeKey calls where each call is used to load the column value for the next key column of the current index of a cursor". Обратите внимание на конструкцию "next key column". Думаю, что авторы имели в виду, что при конструировании ключ для сложного индекса необходимо перечислять колоки в том же порядке, в каком они были перечислены при создании индекса. Это значит, что Вам либо придётся узнать у автора таблицы порядок, в котором перечислялись колонки, либо проверить 4! комбинаций.

    В той же статье, описывающей поведение функции JetMakeKey для параметра cbData сказано следующее: "If the size of the column data is zero then the contents of the input buffer are ignored". Думаю, что это значение позволяет сообщить JetBlue информацию о том, что значение этой колонки нужно игнорировать.

Буду рад, если эта информация оказажется Вам полезной.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.