Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)
Модератор: Модераторы
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)
Собственно, вдохновившись постом "Миллиард таблиц?!" решил провести собственный эксперимент. Правда, вместо PostgreSQL и Perl использовал SQLite и Lazarus.
Подробный отчёт: http://petrochenko.ru/computers/milliar ... qlite.html
Подробный отчёт: http://petrochenko.ru/computers/milliar ... qlite.html
Последний раз редактировалось Nik 07.08.2012 17:45:16, всего редактировалось 1 раз.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Хотелось бы на исходник вашего эксперимента посмотреть... Имхо, просто организовали нагрузочное тестирование одного из моментов компонента для доступа к базе sqlite. По поводу утечки памяти нужно детально смотреть причину и устранять ее.
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Исходник ничего интересного из себя не представляет. Последний вариант выглядит так:
Компоненты для работы с SQLite - здесь.
Собственно, заморочился со всем этим от нечего делать. Никакой особой цели не было. Хотя утечку памяти и правда надо бы отловить - в реальных приложениях те же компоненты использую (хотя, конечно, такого числа запросов за одну сессию делать не приходилось пока ни разу).
Код: Выделить всё
procedure TMainForm.FormCreate(Sender: TObject);
begin
SQL_db:=TSQLiteDatabase.Create('D:\mln.db3');
end;
procedure TMainForm.Button2Click(Sender: TObject);
const
maxq = 100000; // * 10000;
var
SQL_query: string;
i: integer;
t_start, t_finish: TTime;
begin
ProgressBar1.Max:=maxq;
t_start:=Time;
SQL_db.BeginTransaction;
for i:=0 to maxq do
begin
SQL_query:='CREATE TABLE [users'+IntToStr(i)+'] ([id] INTEGER, [name] CHAR, [pass] CHAR, [type] INTEGER)';
SQL_db.execsql(SQL_query);
ProgressBar1.Position:=i;
Label1.Caption:='Создано '+IntToStr(i)+' таблиц из'+IntToStr(maxq)+'('+IntToStr(round(i*100/maxq))+'%)';
t_finish:=Time;
Label2.Caption:='Прошло времени: '+TimeToStr(t_finish-t_start);
Application.ProcessMessages;
end;
SQL_db.Commit;
end;
Компоненты для работы с SQLite - здесь.
Имхо, просто организовали нагрузочное тестирование одного из моментов компонента для доступа к базе sqlite. По поводу утечки памяти нужно детально смотреть причину и устранять ее.
Собственно, заморочился со всем этим от нечего делать. Никакой особой цели не было. Хотя утечку памяти и правда надо бы отловить - в реальных приложениях те же компоненты использую (хотя, конечно, такого числа запросов за одну сессию делать не приходилось пока ни разу).
Смысла проведения эксперемента не понял. В чем прикладной выхлоп?
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Да нет никакого выхлопа - чисто ради академического интереса (насколько я понимаю, исходный эксперимент на Хабре тоже особой смысловой нагрузки не нёс). Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы. Ну и утечку памяти зафиксировал.
Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы.
Неожидано!
Ну и утечку памяти зафиксировал.
А говоришь нет выхлопа
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
vada писал(а):Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы.
Неожидано!
Строго говоря, действительно неожиданно. Потому как в теории размер БД не должен столь явно влиять на скорость выполнения запросов типа "CREATE". Вот на скорость выборок (особенно сложных) влияние должно быть явным (хотя у SQLite с этим как раз всё очень хорошо).
-
Crystal_Ra
- новенький
- Сообщения: 11
- Зарегистрирован: 24.03.2011 17:14:39
Выхлоп академический- ))) здорово звучит.
Хочу спросить? А если вы будете делать коммит не в конце!? цикла а внутри...
Че то сдается мне что SQLite просто накапливает все барахло )))) ....
а вы его копите и копите в цикле ).
С уважением, Crystal_Ra.
Хочу спросить? А если вы будете делать коммит не в конце!? цикла а внутри...
Че то сдается мне что SQLite просто накапливает все барахло )))) ....
а вы его копите и копите в цикле ).
С уважением, Crystal_Ra.
Nik писал(а): Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы.
А после какого количества снижение скорости становится заметным?
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Хочу спросить? А если вы будете делать коммит не в конце!? цикла а внутри...
Скорость создания таблиц начинает падать быстрее.
А после какого количества снижение скорости становится заметным?
В моей заметке было написано - примерно на 15000 таблиц. Первые тысяч 10 вообще создаются за несколько секунд.
