Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.19;
Скачать: CL | DM;

Вниз

Firebird Embedded vs SQLite   Найти похожие ветки 

 
Пробежал...   (2008-07-29 11:48) [0]

Никто не видел сравнения этих двух БД? Плюсы, минусы - отличие?

Нужна в принципе не очень сложная поддержка ansi sql.


 
Правильный$Вася   (2008-07-29 11:49) [1]


>  не очень сложная поддержка ansi sql.

тогда тебе без разницы


 
palva ©   (2008-07-29 11:52) [2]

FB лучше, если есть малейшая перспектива перехода на настоящий сервер или использования хранимых процедур, генераторов и т. д.


 
Пробежал...   (2008-07-29 11:53) [3]

интересуют другие мнения. Возможно, кто-то делал подобный выбор.


 
Пробежал...   (2008-07-29 11:56) [4]

palva, что такое генераторы? Те, что используются в FB для автоинкримента?
PK конечо нужны ;)


 
Пробежал...   (2008-07-29 12:05) [5]

А посоветуйте, пожалуйста, заодно связки, желательно попроще для работы с SQLite из delphi.

Или статейки на тему...


 
Anatoly Podgoretsky ©   (2008-07-29 12:17) [6]

> Пробежал...  (29.07.2008 11:48:00)  [0]

Это не та ли, которая хранит данные в текстовом формате и у которой колонки не имеют типа?


 
Пробежал...   (2008-07-29 12:21) [7]

SQLite? не знаю, начинаю читать про нее, судя по всему да, два типа - integer и text.


 
Пробежал...   (2008-07-29 12:28) [8]

и еще blob.

Вот вроде для введения неплохо - http://www.delphi.int.ru/articles/43/

Там и классы для доступа есть, удобно. Буду встраивать...


 
Пробежал...   (2008-07-29 12:34) [9]


> которая хранит данные в текстовом формате

не похоже, внутри файла БД очень даже бинарные данные.

БД судя по всему неплохая, тем более получила премию google.


 
Правильный$Вася   (2008-07-29 12:42) [10]


> получила премию google

в какой категории?


 
tesseract ©   (2008-07-29 12:45) [11]


> SQLite? не знаю, начинаю читать про нее, судя по всему да,
>  два типа - integer и text.


А Autoinc ? http://aducom.com/cen/download.php


 
ketmar ©   (2008-07-29 12:54) [12]

>[7] Пробежал… (2008-07-29 12:21:00)
>SQLite? не знаю, начинаю читать про нее, судя по всему да, два типа — integer и text.

только text. остальные конвертации «на лету».

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-07-29 13:03) [13]

> Пробежал...  (29.07.2008 12:21:07)  [7]

Да нет там типов у КОЛОНОК, эта база была разработана для Perl


 
Пробежал...   (2008-07-29 13:04) [14]


> в какой категории?

http://osdir.com/Article6677.phtml


> А Autoinc ? http://aducom.com/cen/download.php


http://www.codenet.ru/db/other/sqlite/

"Вставим несколько записей в данную таблицу. Отмечу, что в инструкции создания таблицы для каждого поля мы задали тип данных для его значений, этот тип данных игнорируется программой "SQLite". Система управления базой данных "SQLite" довольно свободно относится к определению типов данных, что не характерно для стандарта языка SQL. Типизация данных в "SQLite" основывается на так называемом принципе "typeless", означающий игнорирование информации о типе данных в определении столбцов таблицы при ее создании с помощью инструкции CREATE TABLE. И все же лучше включать имена типов столбцов при объявлении таблиц, это повысит переносимость вашей базы данных. Имеется одно исключение из принципа "typeless" - это столбец типа INTEGER PRYMARY KEY (INTEGER не INT; INT PRIMARY KEY - удовлетворяет принципу "typeless"). Столбец с типом INTEGER PRIMARY KEY должен содержать 32-х битное целое число, попытка записать данные любого другого типа в столбец этого типа приведет к ошибке. Этот тип обычно используется перед спецификатором столбца AUTOINCREMENT, столбец с типом INTEGER PRIMARY KEY AUTOINCREMENT является ключевым столбцом таблицы, его значения генерируются автоматически"


> только text. остальные конвертации «на лету».

да, окромя PK так и есть по ходу...


 
atruhin ©   (2008-07-29 13:52) [15]

> [13] Anatoly Podgoretsky ©   (29.07.08 13:03)
> Да нет там типов у КОЛОНОК, эта база была разработана для
> Perl

Это было так в первых версиях. Начиная с версии 3:
Datatypes In SQLite Version 3
1. Storage Classes

Version 2 of SQLite stores all column values as ASCII text. Version 3 enhances this by providing the ability to store integer and real numbers in a more compact format and the capability to store BLOB data.
Each value stored in an SQLite database (or manipulated by the database engine) has one of the following storage classes:
   *     NULL. The value is a NULL value.
   *     INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
   *     REAL. The value is a floating point value, stored as an 8-byte IEEE floating point number.
   *     TEXT. The value is a text string, stored using the database encoding (UTF-8, UTF-16BE or UTF-16-LE).
   *     BLOB. The value is a blob of data, stored exactly as it was input.
Вообще если от БД нужно только хранилище, с контролем целостности и 1-5 пользователей, то SQLite неплохой выбор. Когда то использовал: надежная и очень быстрая (быстрая в однопользовательском доступе).
У нас были довольно сложные выборки: диапазон, группировка, математика из таблиц в 2-5 млн. записей, работала отлично.


 
tesseract ©   (2008-07-29 13:56) [16]


> надежная и очень быстрая (быстрая в однопользовательском
> доступе).


С потоками гемор, давно обещают поправить. Хотя и самому можно разобраться.


 
Anatoly Podgoretsky ©   (2008-07-29 14:00) [17]

> atruhin  (29.07.2008 13:52:15)  [15]

Вот то о чем я говорил

>> all column values as ASCII text


 
Slym ©   (2008-07-29 14:03) [18]

Anatoly Podgoretsky ©   (29.07.08 14:00) [17]
и тем неменее SQLite используется в серьезном ПО, например "Транспортная машина" ЦБРФ


 
atruhin ©   (2008-07-29 14:11) [19]

> [17] Anatoly Podgoretsky ©   (29.07.08 14:00)
> Вот то о чем я говорил
>
> >> all column values as ASCII text

Дак читать нужно внимательно!! Это в версии 2, а версия 3 вышла лет 5-7 назад


 
Пробежал...   (2008-07-29 14:15) [20]


> а версия 3 вышла лет 5-7 назад

ну так Подгорецкий родился куда раньше ;)


 
ketmar ©   (2008-07-29 14:16) [21]

>[13] Anatoly Podgoretsky © (2008-07-29 13:03:00)
>эта база была разработана для Perl

ты сегодня в ударе. больше этим не бейся, ты нам ещё нужен.

>[14] Пробежал… (2008-07-29 13:04:00)
>да, окромя PK так и есть по ходу…

да и он, по-моему, text, просто fixed length. но тут утверждать не буду.

>[16] tesseract © (2008-07-29 13:56:00)
>С потоками гемор, давно обещают поправить

оно как бы есть, но на самом деле лучше бы его не было. я в своё время писал «минисервер». %-)

>[18] Slym © (2008-07-29 14:03:00)
>и тем неменее SQLite используется в серьезном ПО

потому что при правильном применении она весьма шустра и надёжна. правда, не на винде, на винде у неё вечно какие-то проблемы.

---
Do what thou wilt shall be the whole of the Law.


 
tesseract ©   (2008-07-29 14:19) [22]


> и тем неменее SQLite используется в серьезном ПО, например
> "Транспортная машина" ЦБРФ


в Iphone тоже активно используеться. И в ряде других приложений.


 
Пробежал...   (2008-07-29 14:20) [23]


> С потоками гемор, давно обещают поправить. Хотя и самому
> можно разобраться.

можно поподробнее, мне это очень важно, многопотоковость во всю работает.

В чем гемор?

- в одновременном обращении к одной базе из разных потоков
- в одновременном обращении к разным базам из разных потоков
- вообще в вызове DLL-функций из разных потоков?


 
tesseract ©   (2008-07-29 14:26) [24]


> можно поподробнее, мне это очень важно, многопотоковость
> во всю работает.



> - в одновременном обращении к одной базе из разных потоков


Так делать низя. Приходиться делать поток на чтение /запись отдельный. По крайней мере для КПК - версии это справделиво до сих пор.


 
Пробежал...   (2008-07-29 14:36) [25]


> Приходиться делать поток на чтение /запись отдельный

потоком на чтение ты имеешь в виду SELECT, а на запись UPDATE / INSERT?


 
tesseract ©   (2008-07-29 14:41) [26]


> потоком на чтение ты имеешь в виду SELECT, а на запись UPDATE
> / INSERT?


Нет. Реальный поток в  поток передавал данные, а он уже их уже загонял / получал. Там что=то было про блокировки, но я решил, что так быстрее и надёжнее :-)


 
ketmar ©   (2008-07-29 14:50) [27]

>[23] Пробежал… (2008-07-29 14:20:00)
>В чем гемор?


>- в одновременном обращении к одной базе из разных потоков
да. читать можно, писать — только один. надо MREW.

>- в одновременном обращении к разным базам из разных потоков
нет, достаточно открыть несколько соединений.

>- вообще в вызове DLL-функций из разных потоков?
см. выше.

блокировки есть, но как-то они фиговато работали в ранних v3. да и не проверял, как оно на винде. что сейчас — не знаю.

я форкал отдельный процесс и общался с ним через unix socket (ну, это pipe такой %-). на винде — поток и тоже пайп. можно без пайпа, конечно, суть не меняется, всё равно MREW нужен.

---
Understanding is not required. Only obedience.


 
ketmar ©   (2008-07-29 14:51) [28]

>[27] ketmar © (2008-07-29 14:50:00)
э… насчёт «читать можно» — есть некоторый шанс, что память мне жестоко изменила.

---
All Your Base Are Belong to Us


 
tesseract ©   (2008-07-29 14:57) [29]


> э… насчёт «читать можно» — есть некоторый шанс, что память
> мне жестоко изменила.


Читать и писать одновременно у меня не получалось.


 
Anatoly Podgoretsky ©   (2008-07-29 14:58) [30]


> Slym ©   (29.07.08 14:03) [18]

Ну мало ли в каких банках работают озабоченые программисты.


 
Anatoly Podgoretsky ©   (2008-07-29 14:59) [31]

> atruhin  (29.07.2008 14:11:19)  [19]

Это как то опровергает мое замечание?


 
Anatoly Podgoretsky ©   (2008-07-29 15:00) [32]

> ketmar  (29.07.2008 14:16:21)  [21]

По всем пунктам, ты похвалил так, как будто помоями облил, правда по делу.


 
tesseract ©   (2008-07-29 15:06) [33]


> По всем пунктам, ты похвалил так, как будто помоями облил,
>  правда по делу.


Я на  MS SQL могу Мрию  с помоями натравить уже.


 
Anatoly Podgoretsky ©   (2008-07-29 15:15) [34]

> tesseract  (29.07.2008 15:06:33)  [33]

Да я верю.


 
pasha_golub ©   (2008-07-29 15:44) [35]

Мальчики, если для нельзя задать однозначно тип колонки, то это хрень. Мне пофигу как оно хранится внутре, хоть с помощью неонки. Но мне не улыбается страдать уличной магией типа StrToIntDef каждый раз когда я беру значение из набора данных.


 
tesseract ©   (2008-07-29 16:10) [36]


> типа StrToIntDef каждый раз когда я беру значение из набора
> данных.


Да рабаотает там всё. field.ASЧегоВамТам отлично справляеться.


 
Пробежал...   (2008-07-29 16:36) [37]


> я форкал отдельный процесс и общался с ним через unix socket

а какой смысл? Потому что из разных потоков было обращение? Ну тогда тебе надо было синхронизировать передачу данных. Не проще ли синхронизировать какой-нибудь поток в процессе?


 
tesseract ©   (2008-07-29 16:50) [38]


> а какой смысл?


Это философия linux, fork делает полную копии потока со всеме данными/ дескрипторами. Хотелось бы такую в винду :-)


 
Игорь Шевченко ©   (2008-07-29 16:54) [39]


> Это философия linux, fork делает полную копии потока со
> всеме данными/ дескрипторами. Хотелось бы такую в винду
> :-)


Сделать можно, только сразу возникает столько вопросов, что ты их решать замучаешься


 
pasha_golub ©   (2008-07-29 16:55) [40]


> tesseract ©   (29.07.08 16:10) [36]

Простите меня, любезнейший. Но котлеты от Sarcophagidae предпочитаю иметь отдельно. В программировании как в армии - все должно быть подстрижено и покрашено в белый цвет. А именно. Иметь тип.


 
pasha_golub ©   (2008-07-29 16:58) [41]


> tesseract ©   (29.07.08 16:10) [36]


> Да рабаотает там всё. field.ASЧегоВамТам отлично справляеться.

Кстати. Оно, конечно, справляется. Но для быстродействия врядли кто-то будет воротить чачу с наследниками TDataset. Обычно стучаться напрямую через ихнюю АПИ. А вот там таки StrToIntDef.

А даже если через наследника TDataset. Все поля будут TStringField. И зачем, простите?


 
tesseract ©   (2008-07-29 16:59) [42]


> что ты их решать замучаешься


Мне это прекрасно известно, в Cygwin она вроде-как реализована.


 
tesseract ©   (2008-07-29 17:04) [43]


> Все поля будут TStringField. И зачем, простите?


Они при обработке результата запроса превращаються в нормальные значения. Не поддерживаються из актуальных Numeuric и Currency.


 
pasha_golub ©   (2008-07-29 17:07) [44]


> tesseract ©   (29.07.08 17:04) [43]

Я не против. Но вот как же это? Я значить имею колонку Age, а там у меня "больно стара бабулька".

Это зачем же? А сервер (СУБД), я так думаю, должон это дело не пущать.


 
tesseract ©   (2008-07-29 17:14) [45]


> Я значить имею колонку Age, а там у меня "больно стара бабулька".
>  


Date, time, timestamp, DateTime - поддерживаються.


 
ketmar ©   (2008-07-29 19:30) [46]

>[29] tesseract © (2008-07-29 14:57:00)
>Читать и писать одновременно

про это я прямо сказал.

>[32] Anatoly Podgoretsky © (2008-07-29 15:00:00)
>По всем пунктам, ты похвалил так, как будто помоями облил, правда по делу.

дык , довольно плотно с этим работал. знаешь, вроде и ругать не за что (да и некого, знал, что выбирал) — но впечатление осталось. кто меня за руку дёрнул в той задаче SQLite использовать — сам не понимаю

>[35] pasha_golub © (2008-07-29 15:44:00)
>Но мне не улыбается страдать уличной магией типа StrToIntDef каждый раз когда я
>беру значение из набора данных.

магию там написали за тебя, не боись.

>[37] Пробежал... (2008-07-29 16:36:00)
>Не проще ли синхронизировать какой-нибудь поток в процессе?

не проще. проще форкнуться. это никсы, тут fork() несколько, мягко говоря, не то же самое, что и CreateProcess(). и накладные расходы совсем другие. и традиции.

>[38] tesseract © (2008-07-29 16:50:00)
>Хотелось бы такую в винду :-)

Неббет делал, после того, как она показал этот код, я перехотел.

>[42] tesseract © (2008-07-29 16:59:00)
>в Cygwin она вроде-как реализована.

очень через загадоное место, правда.

---
All Your Base Are Belong to Us


 
ketmar ©   (2008-07-29 19:31) [47]

>[46] ketmar © (2008-07-29 19:30:00)
зыж конечно, Гарри — он, а не она. %-)

---
Understanding is not required. Only obedience.


 
ketmar ©   (2008-07-29 19:31) [48]

>[47] ketmar © (2008-07-29 19:31:00)
и, кажется, он даже не Гарри. %-)

---
Do what thou wilt shall be the whole of the Law.


 
Пробежал...   (2008-07-30 13:14) [49]

Всем спасибо за ответы!

Еще возник вопрос - как поступает SQLite, если commit не сделан, а при этом база закрывается, то есть sqlite3_finalize


 
tesseract ©   (2008-07-30 13:50) [50]


> если commit не сделан, а при этом база закрывается, то есть
> sqlite3_finalize


Как и все другие базы.


> вроде и ругать не за что (да и некого, знал, что выбирал)


Только себя там ругать приходиться, очень уж простая база и хорошая документация. Работа с SQL одно удовольствие " как скажешь так и будет".


> Всем спасибо за ответы!


Можно начинать флудеть ?


 
Игорь Шевченко ©   (2008-07-30 14:27) [51]


> и, кажется, он даже не Гарри. %-)


И не Неббет вовсе :)
Гэри он, если что


 
Anatoly Podgoretsky ©   (2008-07-30 14:51) [52]

> Игорь Шевченко  (30.07.2008 14:27:51)  [51]

Человек и пароход.


 
Пробежал...   (2008-07-30 14:55) [53]


> Как и все другие базы.

то есть, делает откат?


 
Пробежал...   (2008-07-30 15:02) [54]

и еще интересно.

Есть функция sqlite3_errmsg, которая по ссылке на запрос возвращает сообщение ошибки.

Есть функция sqlite3_errcode, которая возвращает код ошибки.

А есть функция, которая по коду ошибки вернет текст? У меня в заголовочных файлов нету такой функции... Есть только самописная, в которой case по коду ошибки и самописный текст.


 
tesseract ©   (2008-07-30 15:17) [55]


> А есть функция, которая по коду ошибки вернет текст?


Вопрос а зачем ? Для локализации хватает и case + самописный текст.


 
Пробежал...   (2008-07-30 16:06) [56]

затем, что DLL я использую последней версии, а заголовочные файлы хрен знает когда написаны. Да и где гарантия, что в заголовках описаны все внутренние коды ошибок SQLite"а?

Функция очень логичная все-таки. Или нет?


 
tesseract ©   (2008-07-30 16:34) [57]


> затем, что DLL я использую последней версии,


Статически прилинкуй - так проще и надёжнее.


 
Пробежал...   (2008-07-30 16:50) [58]

вот ты отжог ;)


 
tesseract ©   (2008-07-30 18:00) [59]


> вот ты отжог ;)


Ну я же линкую :-)


 
Украинец   (2008-07-30 18:14) [60]


>
> Пробежал...   (29.07.08 11:48)
>
> Никто не видел сравнения этих двух БД? Плюсы, минусы - отличие?
>
>
> Нужна в принципе не очень сложная поддержка ansi sql.


FB EMB - не хочет работать с базами если она расположена на сетевом диске(можно отключить проверку и перекомпилировать исходники). В остальном FB EMB, особенно после версии 2.1 - это мини Оракл.

Ну а если платформа только Win32/64 то уж лучше Access вместо Sqllite.


 
tesseract ©   (2008-07-30 20:34) [61]


> Ну а если платформа только Win32/64 то уж лучше Access вместо
> Sqllite.


"обновите это", "у вас не совсем нужные драйверы", " где мой суженый .NET" ? нафига всё это ? В придачу кучу ODBC-шных приколов, например не выполнение больше одного SELECT / INSERT ?


 
Loginov Dmitry ©   (2008-07-30 21:54) [62]

> FB EMB - не хочет работать с базами если она расположена
> на сетевом диске


Да помоему никакой FB не хочет этого, а зачем?


 
tesseract ©   (2008-07-30 22:01) [63]


> Да помоему никакой FB не хочет этого, а зачем?


Работает FB проверял на сетевом. Только сетm нужна не коцаное виндовое SMB.


 
Пробежал...   (2008-07-31 10:07) [64]


> Ну я же линкую :-)

это ты молодец ;)

Можно подумать в моем заголовочном файле для библиотеки sqlite3.dll линкова не статическая ;))))
Только как это относится к сути вопроса о том, какие коды ошибок могут возвращать функции SQLite? ;)))


 
tesseract ©   (2008-07-31 10:34) [65]


> какие коды ошибок могут возвращать функции SQLite? ;)))


Это относиться к тому, что незачем обновлять sqlite.

"не трожь работающий сервер"- первая заповедь админа.


 
Пробежал...   (2008-07-31 14:19) [66]

еще раз - где гарантия, что в заголовках для delphi перечислены ВСЕ коды ошибок в SQLite?!
У меня конкретное подозрение, что ты не понимаешь о чем я говорю. причем здесь линковка вообще?!?!

Есть функция в SQLite, которая возвращает код ошибки!!! И как мне этот код перевести в строчку?! Я ж даже не знаю все возможных кодов.

Это блин как GetLastError, ты же понимаешь сколько всего кодов! Поэтому существует то, что делает SysErrorMessage...


 
tesseract ©   (2008-07-31 14:36) [67]


> Это блин как GetLastError, ты же понимаешь сколько всего
> кодов!


FormatMessage :-)


> И как мне этот код перевести в строчку?! Я ж даже не знаю
> все возможных кодов.


http://www.sqlite.org/c3ref/c_abort.html

или sqlite3_errmsg  используй  - но там только для английского языка.


 
Пробежал...   (2008-07-31 16:07) [68]


> FormatMessage :-)

не понимаю, что тебя так веселит. Я говорю, что вот в винде так сделано, есть GetLastError, а есть функция в которой из кода можно сделать текст ошибки, и я хочу такое в SQLite. А ты мне пишешь FormatMessage - спасибо, что сказал!


> http://www.sqlite.org/c3ref/c_abort.html

ну да. И тут же ссылочка на "Extended Result Codes"... С таким же успехом в case можно перечислять все ошибки GetLastError, подход сам по себе неверный. DLL должна уметь по коду ошибки возвращать текст.


> или sqlite3_errmsg  используй  - но там только для английского
> языка.

там нельзя получить текст ошибки по коду.


 
tesseract ©   (2008-07-31 16:09) [69]


> там нельзя получить текст ошибки по коду.


А зачем ? Нужен текст сообщения - вызови функцию, код последней ошибки от этого не измениться.


 
Пробегал2....   (2008-07-31 21:59) [70]

tesseract ©   (31.07.08 16:09) [69]
Нужен текст сообщения - вызови функцию


а дело в том, что мой модуль - лишь абстрактный провайдер к базе данных ;) И логично, чтобы в любое время по коду ошибки я мог получить текст. Так логичнее ;)


 
tesseract ©   (2008-07-31 22:39) [71]


> И логично, чтобы в любое время по коду ошибки я мог получить
> текст. Так логичнее ;)


Возможно, но там ошибок-то 15 штук. В общем ерундой маетесь.


 
Asteroid ©   (2008-07-31 23:22) [72]

Из неприятных особенностей SQLite могу заметить только то, что файл БД не умеет расти большими блоками, так что он склонен к фрагментации и существенному снижению быстродействия. Может быть что-то в 3.х изменилось, но в доках не видел.
Впрочем, не знаю, как дела с этим у FBE :)


 
tesseract ©   (2008-07-31 23:27) [73]


>  не умеет расти большими блоками, так что он склонен к фрагментации
> и существенному снижению быстродействия


Размер странички там не выставишь, sqlite для такого просто не предназначена. Кошмар с блоками начинаеться, если записи удалёються беспорядочно, или неправильно рассчитаны по размеру  - ну это беда всех баз, PostgresQl - там это проблема вообще решению слабо поддаёться. Vacuum - он нереален на работающей базе.


 
Anatoly Podgoretsky ©   (2008-08-01 09:52) [74]

> Пробегал2....  (31.07.2008 21:59:10)  [70]

Пользователь: имею я право получить сообщение по коду ошибки.
имеешь
 
Производитель: имею я право не выдавать сообщение по коду ошибки.
имеешь

Вот права и соблюдены.


 
Пробежал...   (2008-08-01 10:18) [75]


> Vacuum - он нереален на работающей базе.

почему? Там даже опция у БД можно выставить - autovacuum.


 
Asteroid ©   (2008-08-01 21:28) [76]

[73]

> Размер странички там не выставишь, sqlite для такого просто
> не предназначена.


Размер странички там есть, и по умолчанию он равен размеру сектора - но это же мало, а большим его, судя по докам, не поставить. Плохо, что из-за этого даже при обычном добавлении база будет дробиться, и vacuum от этого не спасет. Только дефрагментация, которую на рабочей базе тоже лучше не выполнять :)


 
tesseract ©   (2008-08-01 23:08) [77]

Vacuum и есть дефрагментация. По умолчанию слоник в использованные сектора не пишет вроде, поэтому и рост базы такой.


 
Loginov Dmitry ©   (2008-08-02 13:04) [78]

> Впрочем, не знаю, как дела с этим у FBE


В FB нужно при создании базы указывать размер страницы. Максимальное и рекомендуемое значение - 16Кбайт. FB или FBE - без разницы. Размер страницы - характеристика базы, а не сервера.


 
Asteroid ©   (2008-08-03 01:09) [79]

> tesseract ©   (01.08.08 23:08) [77]
> Vacuum и есть дефрагментация.

Сдается, мы немного о разных [де]фрагментациях говорим :)


 
Johnmen ©   (2008-08-03 01:20) [80]

Вот интересно, почему, когда какой-нибудь дятел задаст бредовый вопрос, на него тут же ведутся?
Неужели наивность или ЧСВ так сильно развито? Не хотелось бы верить в это...


 
Украинец   (2008-08-03 01:49) [81]


> Johnmen ©   (03.08.08 01:20) [80]
>
> Вот интересно, почему, когда какой-нибудь дятел задаст бредовый
> вопрос, на него тут же ведутся?
> Неужели наивность или ЧСВ так сильно развито? Не хотелось
> бы верить в это...


Вы хотите сказать что FB - недосервер?


 
Johnmen ©   (2008-08-03 02:06) [82]


> Украинец   (03.08.08 01:49) [81]

Я хочу сказать, что хохлы - ...


 
Пробегал2....   (2008-08-03 04:21) [83]

Johnmen ©   (03.08.08 1:20) [80]
Вот интересно, почему, когда какой-нибудь дятел задаст бредовый вопрос, на него тут же ведутся?


мне кажется тебе нужно расслабиться наконец, нельзя же так переживать то по пустякам ;)


 
Пробежал...   (2008-08-25 11:27) [84]

Товарищи, а вот мне интересно, поле типа: INTEGER PRIMARY KEY autoincrement - оно 64-битное или 32-битное?

Вроде как в документации написано, что оно строго 32-ух битное, но почему тогда функция: sqlite3_last_insert_rowid - возвращает 64-х битное значение?

Ведь объявленный INTEGER PRIMARY KEY по идее должен быть псевдонимом для системной колонки rowid и по идее его можно не вводить, лишь для совместимости с другими БД. Или получается что INTEGER PRIMARY KEY это 32-ух битное, а системный rowid это 64-битное? Как же они тогда могут быть алиасами?

http://www.sqlite.org/c3ref/last_insert_rowid.html
The rowid is always available as an undeclared column named ROWID, OID, or _ROWID_ as long as those names are not also used by explicitly declared columns. If the table has a column of type INTEGER PRIMARY KEY then that column is another alias for the rowid.


 
Пробежал...   (2008-08-25 12:22) [85]

ну и если пошла такая пьянка - интересно, с русскими символами оператор LIKE регистрозависимый или нет? напрямую про русский не нашел, говорят что регистрозависимый для раскладки latin... а для русской?


 
Игорь Шевченко ©   (2008-08-25 12:27) [86]

бегуны недоделанные


 
Пробежал...   (2008-08-25 13:40) [87]

Жалко, что самому модератору приходится указывать на правилах... Но что поделать:

Запрещается:
Хамство, оскорбления, переход на личности...


http://www.delphimaster.ru/forums.shtml


 
Курдль   (2008-08-25 14:04) [88]


> Firebird Embedded vs SQLite

Oracle XE!
И сравнивать не надо будет - мосх напрягать...


 
Medbe}I{onok XML ©   (2008-08-25 14:14) [89]

канешна fb.
чем меньше экзотики в мире, тем лучше.


 
Курдль   (2008-08-25 14:18) [90]


> Medbe}I{onok XML ©   (25.08.08 14:14) [89]


Ах, до чего же забавный у Вас ник!
Как взглянешь на него и кажется, что лучше него только ник:

LEWOЬЬON


 
ketmar ©   (2008-08-25 15:09) [91]

>[84] Пробежал... (2008-08-25 11:27:00)
>Как же они тогда могут быть алиасами?

а вот так. берут и конвертируют. в надежде, что винт закончится быстрее, чем uint32.

>[85] Пробежал... (2008-08-25 12:22:00)
>русскими символами оператор LIKE регистрозависимый или нет?

нет. делай свой, благо, это элементарно. я себе вообще нечёткие уникодные регулярки заместо него вмонтировал как-то. %-)

---
Understanding is not required. Only obedience.


 
Пробежал...   (2008-08-25 16:35) [92]

эээ... Я вот спросил регистрозависимый ли он, ты ответил - нет.
Ты имел в виду, что поиск LIKE регистраНЕзависимый?

А как элементарно? Перебором всех записей что ли? А по другому не понимаю как...


 
ketmar ©   (2008-08-25 16:44) [93]

>[92] Пробежал… (2008-08-25 16:35:00)
это я криво выразился. я в том смысле, что вне ASCII-диапазона LIKE не работает как надо.

>А как элементарно? Перебором всех записей что ли? А по другому не понимаю как…
в SQLite можно регистрировать свои функции. собственно, LIKE именно при помощи этого механизма и зарегистрирован, это не примитив, жёстко прошитый в коде. обычная user function. не помню точно, как оно называется — найдёшь, думаю. или порой в сети мой CDM — там есть как раз такая работа с SQLite. я добавил регэкспы, регистронезависимое сравнение строк через AnsiCompareText() и что-то ещё через этот механизм.

по-сути добавляется новая функция, которую потом можно использовать в обычном SELECT.

где-то в глубине док автор как раз упоминает, что для начиональных символов и сложных извратов LIKE надо перекрывать своей реализацией.

---
Understanding is not required. Only obedience.


 
Пробежал...   (2008-08-25 17:13) [94]

Ну а какова реализация? Я даже не представляю интерфейса написания такой user function, кроме как предоставления двух строк: которая хранится в БД и по которой ищется.

И вызов данной user function для КАЖДОЙ записи... Ведь это медленно получится? очень?


 
ketmar ©   (2008-08-25 17:16) [95]

>[94] Пробежал… (2008-08-25 17:13:00)
>Ну а какова реализация?

обычный callback.

>Ведь это медленно получится? очень?
а LIKE и есть очень медленная штука. именно потому в новых скулитах появился модуль полнотекстовой индексации и поиска.

---
All Your Base Are Belong to Us


 
tesseract ©   (2008-08-25 21:29) [96]


> а LIKE и есть очень медленная штука.


Я только в кронос видел, как она шустро работает. В других базах используеться отдельная полу-внешняя приблуда. Такая есть в Postgress и MS SQL - только она места и проца жрёт - матерь божья.


 
ketmar ©   (2008-08-26 07:43) [97]

>[96] tesseract © (2008-08-25 21:29:00)
в SQLite тоже что-то подобное напиляли не так давно. как работает — не в курсе, не жевал.

---
Understanding is not required. Only obedience.


 
Пробежал...   (2008-08-27 12:16) [98]


> а вот так. берут и конвертируют. в надежде, что винт закончится
> быстрее, чем uint32


то есть, PK все таки у них всепгда 32-ух битное целое?


 
ketmar ©   (2008-08-27 17:14) [99]

>[98] Пробежал… (2008-08-27 12:16:00)
нет, внутри uint64. но раз ты описал автоинкремент как 32-битное, то тебе видней, наверное. не будет же скулит за тебя типы править, это беспредел.

---
Understanding is not required. Only obedience.


 
Пробежал...   (2008-08-27 18:06) [100]


> нет, внутри uint64. но раз ты описал автоинкремент как 32-
> битное, то тебе видней

где я описал как 32-ух битное целое?! Это как раз в статьях везде говорится, что в SQlite нет типов данных, кроме PRIMARY KEY INTEGER, которое является 32-ух битным числом...


 
ketmar ©   (2008-08-27 18:44) [101]

>[100] Пробежал… (2008-08-27 18:06:00)
вот и описал — INTEGER.
а вообще — в новом есть. но хорошо замаскированые. rowid же всегда был 64 бита, и таковым его можно получить соотвтствующей функцией.

---
Do what thou wilt shall be the whole of the Law.


 
Пробегал2....   (2008-08-28 00:17) [102]

ketmar ©   (27.08.08 18:44) [101]
вот и описал — INTEGER


ладно. А как мне его описать 64-ех битным?

Да, в таблицах SQLite по-умолчанию, есть PK. Но рекомендуют вводить явный PK для большей совместимости с другими типами БД.

Иного спосода ввести PK кроме как PRIMARY KEY INTEGER я не встречал. Но при этом  пишется, что это 32-ух битный PK будет... Не понимаю.

Вводить явный PK как "ID PRIMARY KEY INTEGER", а для извлечения все равно использовать rowid?


 
ketmar ©   (2008-08-28 00:54) [103]

>[102] Пробегал2…. (2008-08-28 00:17:00)
>Вводить явный PK как «ID PRIMARY KEY INTEGER», а для извлечения все равно
>использовать rowid?

а в чём проблема? так и делай. тебе не пофигу? не заводи вообще, у него алиас есть. вот и используй алиас.

алсо, раз ты всё равно пишешь со скулитом — наплюй на «совместимость» и не мучай руки.

---
Do what thou wilt shall be the whole of the Law.


 
Пробегал2....   (2008-08-28 01:12) [104]

ketmar ©   (27.08.08 17:14) [99]
нет, внутри uint64


Все таки по ходу ты ошибся.

3.0 The Extended API
Only the three core routines described in section 1.0 are required to use SQLite. But there are many other functions that provide useful interfaces. These extended routines are as follows:

int sqlite_last_insert_rowid(sqlite*);


вроде как 32-ух битное. Нигде не вижу упоминания, что PK является 64-ех битным. Только в заголовочном файле под delphi который я где-то нашел функция описана как возвращающая 64-ех битное значение int64...
Кто ошибся все таки и где?

И как тогда объявить 64-ех битный PK?


 
ketmar ©   (2008-08-28 02:46) [105]

>[104] Пробегал2…. (2008-08-28 01:12:00)
странно. помнится мне, что 64 бита было. сам в заголовках видел. дарагой %-), а у тебя часом не вторая версия скулита?

---
Do what thou wilt shall be the whole of the Law.


 
Пробежал...   (2008-08-28 10:50) [106]


> странно. помнится мне, что 64 бита было. сам в заголовках
> видел. дарагой


Ну да, вот что в заголовчных файлах у меня на D:

function SQLite3_LastInsertRowID(db: TSQLiteDB): int64; cdecl; external "sqlite3.dll" name "sqlite3_last_insert_rowid";

На сайте скулайта вот тоже нашел: http://www.sqlite.org/capi3ref.html#sqlite3_last_insert_rowid

Last Insert Rowid
sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
Each entry in an SQLite table has a unique 64-bit signed integer key called the "rowid". The rowid is always available as an undeclared column named ROWID, OID, or _ROWID_ as long as those names are not also used by explicitly declared columns. If the table has a column of type INTEGER PRIMARY KEY then that column is another alias for the rowid.


то есть, видимо все таки 64-ех битное. Единственное, что не uint, как ты писал ;)

Но в русской документации везде написано, что INTEGER PRIMARY KEY это 32-ух битное. На сайте скулайта тоже это можно встретить.
Видимо, это все относится действительно ко второй и ниже версиям.

Один вопрос, если я создам ID INTEGER PRIMARY KEY, а извлекать буду с помощью sqlite3_column_int64 - все ок будет? Получится int64?

Или объявлять PK как ID INT PRIMARY KEY?


 
Пробежал...   (2008-08-28 11:41) [107]

И еще не могу найти инфу - при UPDATE можно как-то получись количество отфетченных записей?

Или конкретно - нужно при UPDATE по условию WHERE по PK узнать апдейтнулась запись или нет (то есть, есть ли запись с таким ID или нет).


 
Пробежал...   (2008-08-28 12:34) [108]

в общем, применил последнее средство - взял да и протестил ;)
Задавал поле ID INTEGER PRIMARY KEY, один хрен в него можно писать числа навроде "22222222223" и они нормально считываются...


 
Пробежал...   (2008-08-28 14:06) [109]

Странность обнаружена... Если делать новую запись, у которой ID (PK) равно уже существующей записи - то запись не добавляется в базу.
Но что странно, при этом не возникает никаких ошибок... Шозанафиг?


 
Пробежал...   (2008-08-28 14:13) [110]

ну и интересно имеет ли смысл в SQLite делать индексы.


 
ketmar ©   (2008-08-28 18:08) [111]

>[106] Пробежал… (2008-08-28 10:50:00)
>в русской документации

не читайте перед обедом советских газет. (ц)

>Один вопрос, если я создам ID INTEGER PRIMARY KEY, а извлекать буду с помощью
>sqlite3_column_int64 — все ок будет? Получится int64?

по-идее, всё будет нормально. ибо P.K. — это алиас для rowid.

>нужно при UPDATE по условию WHERE по PK узнать апдейтнулась запись или нет
я честно делал сначала SELECT.

>Если делать новую запись, у которой ID (PK) равно уже существующей записи — то
>запись не добавляется в базу.
>Но что странно, при этом не возникает никаких ошибок

видимо, логика «не проверил? ССЗБ».

>имеет ли смысл в SQLite делать индексы.
да. ускоряет заметно. посмотри в код — если скулит может использовать индекс, он и генерирует в VM код для использования индекса, а не обычный перебор.

---
Understanding is not required. Only obedience.


 
Пробежал...   (2008-08-28 18:18) [112]


> видимо, логика «не проверил? ССЗБ».


это как так. Если я говорю, что нет ошибок - это значит что как раз проверил. Экспериментировал на SQLite database browser. Не вставляет запись, но пишет NO ERROR.


> да. ускоряет заметно.


PK думаю индексируется по-умолчанию?


 
ketmar ©   (2008-08-28 18:35) [113]

>[112] Пробежал… (2008-08-28 18:18:00)
>это как так

я к тому, что если юзер не сделал SELECT, чтобы лично выяснить — то он ССЗБ, это скулит не заботит. %-)

>PK думаю индексируется по-умолчанию?
кажется, да. вроде что-то такое в исходниках было. да сам глянь, какой код VM генирурет, и всё. там есть команда, которая показывает код, емнип.

---
Do what thou wilt shall be the whole of the Law.



Страницы: 1 2 3 вся ветка

Текущий архив: 2008.10.19;
Скачать: CL | DM;

Наверх




Память: 0.76 MB
Время: 0.008 c
15-1219645542
Slider007
2008-08-25 10:25
2008.10.19
С днем рождения ! 25 августа 2008 понедельник


15-1220003252
data
2008-08-29 13:47
2008.10.19
Вопрос к знатокам оракла. Есть ли ограничение на кол-во действий


15-1219912790
ищущий
2008-08-28 12:39
2008.10.19
Должностная инструкция инженера ИВТ


2-1221488145
Totaren
2008-09-15 18:15
2008.10.19
Как убрать полосы прокрутки в родительской форме MDI приложения?


2-1221128034
vegarulez
2008-09-11 14:13
2008.10.19
Вопрос про stream.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский