The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Простая база данных, в которую можно быстро перегнать CSV фа..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 13-Фев-09, 12:52 
Есть большой CSV файл, и его надо просмотривать в web с сортировкой по различным столбцам и простеникими условиями. Во что бы его такое перегнать для этого? Файл 30 MB, 200 тыщ записей, в SQLite perl'ом перегоняется около 20 секунд, что медленно (т.е. через while(<>) он читается порядка пары секунд - хотелось бы чтобы с базой данных было сравнимо). Настройки такие:

PRAGMA journal_mode = NONE
PRAGMA synchronous = OFF
PRAGMA locking_mode = EXCLUSIVE
PRAGMA temp_store = MEMORY
PRAGMA cache_size = 20000

В mysql также 20 сек, но правда без настроек, да и mysql вообще говоря жирно.

В SQLite можно еще какие-нибудь прагмы включить, чтобы быстрее было? Никакие целостности базы, понятно, не волнуют. Можно из коммандной строки его перегнать (т.е. без перла с dbi, что вносит свои тормоза)? Может другие БД для этого есть?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Pahanivo email(ok) on 13-Фев-09, 13:05 
>[оверквотинг удален]
>PRAGMA temp_store = MEMORY
>PRAGMA cache_size = 20000
>
>В mysql также 20 сек, но правда без настроек, да и mysql
>вообще говоря жирно.
>
>В SQLite можно еще какие-нибудь прагмы включить, чтобы быстрее было? Никакие целостности
>базы, понятно, не волнуют. Можно из коммандной строки его перегнать (т.е.
>без перла с dbi, что вносит свои тормоза)? Может другие БД
>для этого есть?

а зачем тебе его вообще быстро загонять?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 13-Фев-09, 14:13 
>а зачем тебе его вообще быстро загонять?
>>его надо просмотривать в web с сортировкой по различным столбцам и простенькими условиями
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Pahanivo email(ok) on 13-Фев-09, 14:17 
>>а зачем тебе его вообще быстро загонять?
>>>его надо просмотривать в web с сортировкой по различным столбцам и простенькими условиями

я понял это, вопрос был ЗАЧЕМ БЫСТРО?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 13-Фев-09, 14:31 
>я понял это, вопрос был ЗАЧЕМ БЫСТРО?

аа. Ну была идея при первом запросе смотреть на дату модификации файлов и если исходный файл изменился пересоздавать базу. Ну повисит один запрос в неделю секунд 5, подумаешь. А 20 это уже не кошерно, тем более что будет больше.
Если перегонять заранее, то SQLite подходит практически идеально, но мне казалось что если не заморачиваться журналами и транзакциями а просто лить рекорды в базу, а потом быстро создать индексы, должно быть быстро. Вопрос в том кто это умеет, желательно консольной утилитой, ибо perl по строкам читает это долго.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Andrey Mitrofanov on 13-Фев-09, 14:45 
>>ЗАЧЕМ БЫСТРО?
>аа. Ну была идея при первом запросе смотреть на дату модификации файлов и если исходный файл изменился пересоздавать базу.

Ежели измения недольшие (например, добавление 1-2-20-100... строк), то сделай инкрементальное обновление базы по дифу исходного файла. Когда и если заработает -- будет быстро (для небольших изменений).

>один запрос
>в неделю секунд 5, подумаешь. А 20 это уже не кошерно,

По запросу, обнаружевшему изменение отдавать старую страницу и запускать обновление асинхронно. Следующий запрос, прришедший ч/з 20+ секунд - получит новые данные.

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

>Если перегонять заранее, то SQLite подходит практически идеально,

Ну, перегоняй _асинхронно_. Запуск "перегонного аппарата" - опросом по крону и/или, как выше, из клиентскмх запросов.

>если не заморачиваться журналами и транзакциями а просто

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 14-Фев-09, 01:32 
Перечитайте пожалуйста тред.

>Ежели измения недольшие (например, добавление 1-2-20-100... строк), то сделай инкрементальное обновление базы
>по дифу исходного файла. Когда и если заработает -- будет быстро
>(для небольших изменений).

Изменений нет вообще.

>>один запрос
>>в неделю секунд 5, подумаешь. А 20 это уже не кошерно,
>По запросу, обнаружевшему изменение отдавать старую страницу и запускать обновление асинхронно. Следующий
>запрос, прришедший ч/з 20+ секунд - получит новые данные.

Нет, старую страницу отдавать нельзя.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от const86 (ok) on 13-Фев-09, 13:54 
Беркли, возможно, с индексами для нескольких полей. Плюс ещё базу можно создавать в tmpfs, а потом готовую переложить куда надо (если вообще надо). Не обещаю, что выйдет намного быстрее, но более быстрый вариант вряд ли придумаешь.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от const86 (ok) on 13-Фев-09, 13:58 
Хотя вот ещё. Если размеры базы и оперативки позволяют загружать её целиком, то можно читать прямо из csv или юзать сериализацию объектов, a-la pickle в питоне, не знаю как это в перле делается.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 13-Фев-09, 14:31 
>Беркли, возможно, с индексами для нескольких полей. Плюс ещё базу можно создавать
>в tmpfs, а потом готовую переложить куда надо (если вообще надо).
>Не обещаю, что выйдет намного быстрее, но более быстрый вариант вряд
>ли придумаешь.

bdb попробую, забыл про нее совсем. tmpfs и память ен подходят.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от angra (ok) on 13-Фев-09, 18:25 
Несколько тестов показали
dbi без транзакций - слишком долго чтобы дождатся
dbi с транзакциями, но без prepare+execute 0m19.059s
без dbi через open FH,'|/usr/bin/sqlite3 test.db', используя транзакции 0m6.831s
dbi с  транзакциями и prepare+execute 0m5.943s

Все это без каких-либо настроек sqlite3. Используя вышеизложенное, телепатирую - вы забыли про prepare+execute :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 14-Фев-09, 01:34 
Э-э-э, а как это еще по-вашему можно сделать, кроме как через prepare/execute? Имено ими с сделаоно.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от angra (??) on 14-Фев-09, 07:06 
Покажите код и его замер на вашей машине.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от 0dmin on 13-Фев-09, 20:16 
>Файл 30 MB, 200 тыщ записей, в SQLite perl'ом перегоняется около 20 секунд,
>что медленно (т.е. через while(<>) он читается порядка пары секунд - хотелось
>бы чтобы с базой данных было сравнимо). Настройки такие:

Опять - "админящие программеры" атакуютЪ :)

Автор - запусти sqlite3, затем натяпай .h<Enter> - читай внимательно и фффтыкай на опции .mode csv & .import file table
Никаких заметь перлов и по-строчный импортов :)))

PS: Всё как обычно укра^W написано до нас :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от angra (ok) on 13-Фев-09, 21:01 
Я так понимаю "программирующий админ" в жизни своей не видел csv файла сложнее чем ряд чисел разделенных запятой, про роль всяких там кавычек и слешей даже не догадывается. Надо заметить что .import придерживается такого же примитива и единственный задаваемый параметр это delimiter. Рекомендую глянуть синтаксис load data infile в mysql для сравнения.
И это не говоря уже про то, что по различным причинам запуск клиентского бинаря может быть нежелателен/невозможен.

P.S. .import почти в два раза быстрее перла или текстового файла с insert.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от 0dmin on 14-Фев-09, 09:57 
>Я так понимаю "программирующий админ" в жизни своей не видел csv файла
>сложнее чем ряд чисел разделенных запятой, про роль всяких там кавычек
>и слешей даже не догадывается.

Автор люто налюбился с экспортом из Excel лет 10 назад :) Таких сумасшедших Csv-шек больше ни за каким другим софтом не замечал ... а делает их уйма софта, до сих пор!

>Надо заметить что .import придерживается такого же примитива и единственный задаваемый параметр это delimiter.

Чего может оказаться вполне достаточно. Равно как может и не оказаться.

>И это не говоря уже про то, что по различным причинам запуск
>клиентского бинаря может быть нежелателен/невозможен.

А запуск такого же клиентского перл-скрипта - будет кошерным? Чудеса!(С) :-)

>P.S. .import почти в два раза быстрее перла или текстового файла с insert.

Ну дык.(С)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Простая база данных, в которую можно быстро перегнать CSV фа..."  
Сообщение от Аноним (??) on 14-Фев-09, 01:35 
>Автор - запусти sqlite3, затем натяпай .h<Enter> - читай внимательно и фффтыкай на опции .mode csv & .import file table
>Никаких заметь перлов и по-строчный импортов :)))

Про это я и спрашивал, спасибо.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру