Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#16: 2015-03-08 11:32:37 ЛС | профиль | цитата
nesco писал(а):
очень даже неплохо читается в локальной сети с другого компа
и пишется.
Сам делал для автосервиса ЛС с подключением семи компов. Работает нормально. И SQLite здесь не при чём. При записи файл БД блокируется средствами OC. Если идет запись в файл БД, то даже блокнот отказывается открыть файл. Проверено.
Но то, к чему стремится Gunnman, это не из той оперы.
Этот режим доступа к файлу БД только для его программы.
Если я подключусь к этому же файлу, то его режим мне по барабану.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#17: 2015-03-08 11:48:33 ЛС | профиль | цитата
Tad писал(а):
Но то, к чему стремится Gunnman, это не из той оперы

Я вот только одного не могу понять -- а накой козе баян, те на кой ляд распараллелевать запись, смысл...
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#18: 2015-03-08 14:13:46 ЛС | профиль | цитата
nesco писал(а):
а накой козе баян
nesco, даже пример привести не могу.
Два потока на ОДИН хард одновремённо писáть не могут. Чисто физически.
Чисто физически два мужика одновремённо пи́сать на один хард могут.
Это параметры БД создаваемых нашей, идущей в комплекте с HiAsm, dll
NameValue
locking_modenormal
max_page_count1073741823
page_count55
page_size1024
busy_timeout3000
cache_size2000
case_sensitive_likeoff
checkpoint_fullfsyncoff
collation_list[RTRIM], [NOCASE], [BINARY]
compile_options[ENABLE_COLUMN_METADATA], [ENABLE_FTS3], [ENABLE_FTS3_PARENTHESIS], [ENABLE_RTREE], [SOUNDEX], [SYSTEM_MALLOC], [THREADSAFE=1]
Gunnman, создай БД с одной таблицей и выложи здесь.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#19: 2015-03-08 15:06:08 ЛС | профиль | цитата
http://forum.hiasm.com/forum_serv.php?q=56&id=3916 библиотека 3.8.6., база с 1 таблицей.

Несколько потоков нужны не для записи а для чтения.
Пример:
Режим Serialized - данные чтения и записи могут идти с кучи потоков, но последовательно, они блокируют друг друга - ставят в очередь.

Режим Multi-Thread в основном потоке запись, в дополнительном чтение и ни каких database locked.
карма: 0

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#20: 2015-03-08 15:55:09 ЛС | профиль | цитата
Gunnman писал(а):
Режим Multi-Thread в основном потоке запись, в дополнительном чтение и ни каких database locked

Пардон. А тогда как же это соответствует вот этому
Gunnman писал(а):
Несколько потоков нужны не для записи а для чтения

ЕМНИП. База прекрасно читается из нескольких потоков без всяких затычек.
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#21: 2015-03-08 15:56:47 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-10 06:06:43
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#22: 2015-03-08 16:01:26 ЛС | профиль | цитата
Выше я. Выбросило. Третья колонка Modify =False говорит о том, что я ничего в БД не изменял.
Надеюсь, что этот Test.db создавался по sqlite3_open_v2() или нет ?

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#23: 2015-03-08 16:38:35 ЛС | профиль | цитата
Tad, Вы путаете,

sqlite3_open_v2 - это открытие базы, с параметрами (чтение\ чтение+ запись, режим потоков)
sqlite3_open - открытие базы без параметров.

базу создавал через sqlite3_create

щас допиливаю sqlite3_create_function_v2

я вобще не понимаю о чем спор?) я ни с кем не спорил, я собрал библиотеку под себя и сейчас ее тестирую


------------ Дoбавленo в 16.13:
Тьху, какой sqlite_create - это для таблиц и прочего.
База создается при запуске sqlite3 и указании имени БД которую нужно открыть, опять же только в том случае если при компиляции было указано SQLITE_OPEN_CREATE
------------ Дoбавленo в 16.20:
Add(SQLite_DB,6356802,448,119)
{
FileName="test.db"
link(onOpen,9084959:doQuery,[(492,125)(492,146)(436,146)(436,167)])
}
Add(Thread,7192825,294,126)
{
Delay=100
link(onExec,6356802:doOpenN,[])
}
Add(Hub,11625665,224,154)
{
link(onEvent1,7192825:doStart,[(256,160)(256,132)])
link(onEvent2,2076250:doStart,[(266,167)(266,237)])
}
Add(SQLite_DB,12431277,448,224)
{
FileName="test.db"
link(onOpen,14735642:doQuery,[(492,230)(492,251)(436,251)(436,272)])
}
Add(Thread,2076250,294,231)
{
Delay=100
link(onExec,12431277:doOpenN,[])
}
Add(SQLite_Query,9084959,448,161)
{
SQL="insert into test values (1,'2');"
link(onError,9152759:doText,[])
link(dbHandle,6356802:dbHandle,[])
}
Add(SQLite_Query,14735642,448,266)
{
SQL="select count(*) from test;"
link(onQuery,14207607:doWork2,[])
link(onError,14207607:doWork3,[(515,286)])
link(dbHandle,12431277:dbHandle,[])
}
Add(Label,9152759,532,175)
{
Left=109
Top=14
Width=156
}
Add(Label,10440347,532,266)
{
Left=109
Top=52
Width=158
}
Add(HubEx,14207607,511,266)
{
link(onEvent,10440347:doText,[])
}
Add(Button,1901559,168,154)
{
Left=14
Top=38
link(onClick,11625665:doEvent1,[])
}

------------ Дoбавленo в 16.38:
nesco писал(а):
и пишется.
Сам делал для автосервиса ЛС с подключением семи компов. Работает нормально. И SQLite здесь не при чём. При записи файл БД блокируется средствами OC. Если идет запись в файл БД, то даже блокнот отказывается открыть файл. Проверено.
Но то, к чему стремится Gunnman, это не из той оперы.
Этот режим доступа к файлу БД только для его программы.
Если я подключусь к этому же файлу, то его режим мне по барабану.


Я только что сделал запись в БД раз в 100мс, вставка 6 строк и знаете что ? БД открывается блокнотом на ура.

Но то, к чему стремится Gunnman, это не из той оперы. с чего, вот с чего вы так решили???? Где я писал что-то подобное?

Я писал про то что МОИ труды прошли для МЕНЯ не бесполезно, я научился собирать библиотеку Sqlite3.dll с нужными мне параметрами...без гугления "скачать sqlite3.dll".
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#24: 2015-03-08 16:58:55 ЛС | профиль | цитата
Gunnman писал(а):
База создается при запуске sqlite3 и указании имени БД которую нужно открыть
Чуть-чуть не так.
При попытке "открытия", если БД с таким именем нет, то она создаётся и "открывается".
Так вот ты базу создавал этим

sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,SQLITE_OPEN_READWRITE+SQLITE_OPEN_NOMUTEX,nil); 
или нет.
Gunnman писал(а):
Я только что сделал запись в БД раз в 100мс, вставка 6 строк и знаете что ? БД открывается блокнотом на ура.
Блокнот прочитал в паузе между записями.
А ты запусти BEGIN TRANSACTION записей тысяч на 50 и посмотри.
------------ Дoбавленo в 16.58:
Gunnman писал(а):
Я писал про то что МОИ труды прошли для МЕНЯ не бесполезно
Это да.
Но с такими параметрами

page_count 46  
page_size 1024
это черепаха.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#25: 2015-03-08 17:13:18 ЛС | профиль | цитата
Tad, нет я ее через sqlitebrowser создавал.
п.с. сейчас потестирую
------------ Дoбавленo в 17.02:
Gunnman писал(а):
Чуть-чуть не так.
При попытке "открытия", если БД с таким именем нет, то она создаётся и "открывается".

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

не создаст файл БД:
sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,SQLITE_OPEN_READWRITE+SQLITE_OPEN_NOMUTEX,nil);

создаст:
sqlite3_open_v2(PChar(CodePage1ToCodePage2(ReadString(_Data,_data_FileName, _prop_FileName), CP_ACP, CP_UTF8)), id,SQLITE_OPEN_CREATE+SQLITE_OPEN_READWRITE+SQLITE_OPEN_NOMUTEX,nil);




------------ Дoбавленo в 17.08:
Add(SQLite_DB,6356802,448,119)
{
FileName="test.db"
link(onOpen,9267624:doEvent1,[])
}
Add(SQLite_Query,9084959,448,203)
{
link(onError,9152759:doText,[])
link(dbHandle,6356802:dbHandle,[])
}
Add(Label,9152759,532,217)
{
Left=109
Top=14
Width=156
}
Add(Button,1901559,294,126)
{
Left=14
Top=38
link(onClick,6356802:doOpenN,[])
}
Add(FormatStr,3837801,371,203)
{
DataCount=1
Mask="insert into test values (%1,'%1');"
link(onFString,709462:doWork2,[])
}
Add(DoData,1871601,385,154)
{
Data=String(BEGIN TRANSACTION;)
link(onEventData,8535308:doWork1,[(438,160)])
}
Add(For,5754753,315,203)
{
End=200000
link(onEvent,3837801:doString,[])
link(onStop,5439098:doData,[(359,216)(359,251)])
}
Add(Hub,9267624,497,119)
{
link(onEvent1,1871601:doData,[(523,125)(523,143)(373,143)(373,160)])
link(onEvent2,5754753:doFor,[(523,132)(523,170)(303,170)(303,209)])
}
Add(HubEx,8535308,434,203)
{
link(onEvent,9084959:doQuery,[])
}
Add(DoData,5439098,371,245)
{
Data=String(COMMIT;)
link(onEventData,709462:doWork3,[(424,251)])
}
Add(HubEx,709462,420,203)
{
link(onEvent,8535308:doWork2,[])
}


открывается блокнотом)))
------------ Дoбавленo в 17.09:
Блокировки в SQLITE как я понял не на уровне жесткого диска i\o а на уровне буфера ОС, блокировка флагами.
------------ Дoбавленo в 17.13:
Gunnman писал(а):
Это да.
Но с такими параметрами
page_count 46  
page_size 1024 
это черепаха.


ну я ж учусь))) не все параметры SQLITE знаю, пересоберу библиотеку) я пока пытаюсь понять нафига мне был нужен NOMUTEX, если FULLMUTEX (Serialized режим) - его хватает за глаза...теперь ради спортивного интереса будут пробовать собрать рабочую схему с NOMUTEX...чтобы понять в каких случаях она может понадобится.
На habrahabr и ресурсах типа stackoverflow пишут sqlite3_open не используется в серьезных проектах, мне конечно до них еще далеко, но все же данная БД вызвала огромный интерес!
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#26: 2015-03-08 18:55:21 ЛС | профиль | цитата
Gunnman писал(а):
я пока пытаюсь понять нафига мне был нужен

Тестовая схема.
С нашей dll - 22 сек. с obj - 12 сек.
code_35301.txt
Без строк Begin и Commit тестировать не решился. Знаю, что очень долго.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_35301.txt [1.4KB] [207]
Ответов: 655
Рейтинг: 18
#27: 2015-03-08 19:15:14 ЛС | профиль | цитата
Tad, у меня чуть быстрее 20 сек) попробую в многопоточном
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#28: 2015-03-08 20:51:09 ЛС | профиль | цитата
Gunnman писал(а):
у меня чуть быстрее
Зависит от харда и процессора
Что тебе нужно знать.
Первые 100 байт файла базы данных содержат заголовок базы, в таблице представлена схема заголовка.
tabl_sqlite.jpg
не помню где взял, но для создания программки для чтения параметров файла бд пригодилась.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1tabl_sqlite.jpg [409KB] [766]
Ответов: 655
Рейтинг: 18
#29: 2015-03-08 21:02:59 ЛС | профиль | цитата
Tad, спасибо! очень полезная инфа!
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#30: 2015-03-08 21:13:56 ЛС | профиль | цитата
Нашёл ссылку на таблицу и описание http://habrahabr.ru/post/223449/
tabl_sqlite_1.jpg
Проверил 4-е байта и сразу знаешь изменялся файл или нет.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1tabl_sqlite_1.jpg [56.2KB] [578]
30
Сообщение
...
Прикрепленные файлы
(файлы не залиты)