Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Nik » 27.05.2011 19:09:44

Собственно, вдохновившись постом "Миллиард таблиц?!" решил провести собственный эксперимент. Правда, вместо PostgreSQL и Perl использовал SQLite и Lazarus.

Подробный отчёт: http://petrochenko.ru/computers/milliar ... qlite.html
Последний раз редактировалось Nik 07.08.2012 17:45:16, всего редактировалось 1 раз.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Padre_Mortius » 27.05.2011 21:47:22

Хотелось бы на исходник вашего эксперимента посмотреть... Имхо, просто организовали нагрузочное тестирование одного из моментов компонента для доступа к базе sqlite. По поводу утечки памяти нужно детально смотреть причину и устранять ее.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Nik » 28.05.2011 10:45:31

Исходник ничего интересного из себя не представляет. Последний вариант выглядит так:

Код: Выделить всё
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
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение vada » 30.05.2011 10:17:47

Смысла проведения эксперемента не понял. В чем прикладной выхлоп?
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Nik » 30.05.2011 11:10:04

Да нет никакого выхлопа - чисто ради академического интереса (насколько я понимаю, исходный эксперимент на Хабре тоже особой смысловой нагрузки не нёс). Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы. Ну и утечку памяти зафиксировал.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение vada » 30.05.2011 17:53:31

Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы.

Неожидано! :)
Ну и утечку памяти зафиксировал.

А говоришь нет выхлопа :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Nik » 30.05.2011 20:56:14

vada писал(а):
Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы.

Неожидано! :)

Строго говоря, действительно неожиданно. Потому как в теории размер БД не должен столь явно влиять на скорость выполнения запросов типа "CREATE". Вот на скорость выборок (особенно сложных) влияние должно быть явным (хотя у SQLite с этим как раз всё очень хорошо).
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Crystal_Ra » 25.06.2011 01:16:03

Выхлоп академический- ))) здорово звучит.

Хочу спросить? А если вы будете делать коммит не в конце!? цикла а внутри...

Че то сдается мне что SQLite просто накапливает все барахло )))) ....
а вы его копите и копите в цикле ).

:wink:

С уважением, Crystal_Ra.
Crystal_Ra
новенький
 
Сообщения: 11
Зарегистрирован: 24.03.2011 18:14:39

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Vadim » 25.06.2011 04:59:18

Nik писал(а): Хотя я попутно узнал, что скорость создания таблиц в базе SQLite снижается пропорционально увеличению объёма базы.

А после какого количества снижение скорости становится заметным?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Миллиард таблиц в базе SQLite (по мотивам поста на Хабре)

Сообщение Nik » 25.06.2011 14:33:01

Хочу спросить? А если вы будете делать коммит не в конце!? цикла а внутри...

Скорость создания таблиц начинает падать быстрее.


А после какого количества снижение скорости становится заметным?

В моей заметке было написано - примерно на 15000 таблиц. Первые тысяч 10 вообще создаются за несколько секунд.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров


Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru