Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26113
Рейтинг: 2126
#886: 2012-01-09 03:36:51 ЛС | профиль | цитата
Konst писал(а):
помоему nesco схема

Честно сказать, то я не помню такой схемы
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#887: 2012-01-09 17:10:39 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2021-05-22 08:01:51
карма: 0

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#888: 2012-01-09 17:14:48 ЛС | профиль | цитата
А это не на базе штатных примеров, где *.csv преобразуется в SQlite
карма: 22

0
Ответов: 1328
Рейтинг: 69
#889: 2012-01-09 18:28:17 ЛС | профиль | цитата
хм.. что-то не видел такого в штатных примерах.. это в ВиндовсДатаБэйс?
карма: 2

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#890: 2012-01-09 18:31:49 ЛС | профиль | цитата
Konst писал(а):
хм.. что-то не видел такого в штатных примерах.. это в ВиндовсДатаБэйс?

Да не было такого, че-то я делал подобное на базе штатных примеров
карма: 22

0
Ответов: 704
Рейтинг: 7
#891: 2012-03-06 03:23:50 ЛС | профиль | цитата
Кстати, а на счет загрузки кучки строк: как правильно сделать INSERT не каждой строки по-отдельности, а всех сразу (5-10 строк)? Чтоб выиграть во времени.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#892: 2012-03-06 10:01:26 ЛС | профиль | цитата
Neo писал(а):
Чтоб выиграть во времени.
Lasciate ogni speranza voi ch'entrate.(итал.)
Если вспомнить, что в компе все обрабатывается последовательно (для строк - посимвольно), то только скоростной многоядерный процессор и скоростной хард смогут помочь.
Чем короче строка - тем быстрее она записывается в БД.
Чем оптимальней запрос к БД - тем скорее получаешь результат.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#893: 2012-03-06 10:05:43 ЛС | профиль | цитата
Neo писал(а):
Чтоб выиграть во времени.

Многоядерный процессор, несколько (по числу ядер) баз в ОЗУ и работа в несколько потоков. Потом, правда, маета с несколькими базами нивелирует всю выгоду от параллельных вычислений.
карма: 1

0
Ответов: 704
Рейтинг: 7
#894: 2012-03-06 12:12:59 ЛС | профиль | цитата
Эт я наверное выразился неправильно в заполночное время
Просто каждый раз при записи в базу (на диск) идет обращение к файлу, создание журнала работы с базой и т.д.. Хочу эти мои строки не по-одной записывать, а как-то пачечкой. Или это делается обычным запросом, где каждый запрос в новой строке?
карма: 0

0
Ответов: 758
Рейтинг: 112
#895: 2012-03-06 12:39:14 ЛС | профиль | цитата
Neo, Когда-то я уже писал про ускорение загрузки в это теме поищи.
Tad справедливо заметил, что при таком способе сильно повышается риск потери информации, но зато колоссальный прирост скорости при больших объемах

PRAGMA synchronous=OFF;                             /*Выключает синхронизацию*/
PRAGMA temp_store=MEMORY; /*Хранит временную таблицу в памяти*/

BEGIN transaction;
INSERT ....
INSERT ....
INSERT ....
.....
COMMIT transaction;
карма: 1

1
файлы: 1code_27089.txt [300B] [304]
Голосовали:Neo
Ответов: 704
Рейтинг: 7
#896: 2012-03-06 12:53:07 ЛС | профиль | цитата
miver, спасибо за вариант, но мне данные терять нельзя совсем.
А можно просто все запросы послать списком строк?

У меня вообще задача такая: данные, приходящие со скоростью 20 строк в секунду, нужно писать в базу. Она должна быть на диске, ибо используется как лог, не более.
Вот чтоб не делать каждый раз запись отдельно (это немного тормозит), я решил буферезировать штук 10 (может 20), а потом эту пачку записать в новом потоке.
карма: 0

0
Ответов: 3889
Рейтинг: 362
#897: 2012-03-06 13:03:22 ЛС | профиль | цитата
Neo, вообще-то он Вам предложил именно такой вариант, начните с PRAGMA synchronous=OFF, это отключит ожидание записи на диск. SQLite по умолчанию может до двух мегабайт данных буферизировать в память, ожидая пока диск запишет предыдущую порцию. И этот буфер можно увеличивать.
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#898: 2012-03-06 13:03:36 ЛС | профиль | цитата
Neo писал(а):
Вот чтоб не делать каждый раз запись отдельно (это немного тормозит), я решил буферезировать штук 10 (может 20), а потом эту пачку записать в новом потоке

Нахрена. Используй UDP порт для связки модуля получения данных и модуля записи в базу. UDP порт имеет системный буфер, тебе не нужно будет делать свой. К тому же, движок базы сам имеет буфер комманд
карма: 22

0
Ответов: 758
Рейтинг: 112
#899: 2012-03-06 13:17:18 ЛС | профиль | цитата
Neo писал(а):
А можно просто все запросы послать списком строк?

Да конечно, но скорости это не добавит.
Используй transaction без отключения синхронизации и хранения в памяти
Neo писал(а):
ибо используется как лог

ну так пиши сразу в файл напрямую будет быстрее. Зачем тебе БД , если запросы к ней делать не будеш
карма: 1

0
Ответов: 704
Рейтинг: 7
#900: 2012-03-06 13:23:02 ЛС | профиль | цитата
1nd1g0, но ведь упомянуто же, что сильно возрастает риск потери данных.
А движок будет буферизировать, если провести PRAGMA synchronous=OFF ? - запутался

Может у базы и есть сбой буфер, но при записи в файлы от 5Мб идут тормоза главного потока. Вот и хочу тут вставить буфер и в базу писать из параллельного потока. Это неверно?

карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)