powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Максимальное количество строк
9 сообщений из 9, страница 1 из 1
Максимальное количество строк
    #36920384
mrbrooks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, какое максимальное количество строк допустимо в SQLite.
Здесь, http://www.sqlite.org/limits.html я этого предела не нашел. Или криво смотрел. Возможно это SQLITE_MAX_PAGE_COUNT?
...
Рейтинг: 0 / 0
Максимальное количество строк
    #36920652
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Если практический интерес - то очень, очень много
2) Если теоретический интерес - то в районе 2^64 на таблицу
...
Рейтинг: 0 / 0
Максимальное количество строк
    #36920725
mrbrooks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
именно практический. дело в том что при связи многие-ко-многим получается слишком уж здоровый справочник. но определенно могу сказать, что в 2^64 я вписываюсь :)
спасибо.
...
Рейтинг: 0 / 0
Максимальное количество строк
    #36924065
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
Когда-то я некоторые свои тесты в блоге публиковал, в частности:

Замечу, что при упорядоченной вставке 1 миллиарда первичных ключей в таблицу скорость вставки снижается всего лишь примерно на 3% - великолепный результат. Но это верно только до тех пор, пока вставляемые записи строго упорядочены.

Так что можно очень много строк вставить, и даже не потерять в производительности.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Максимальное количество строк
    #37588313
youmych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не подскажите ли, можно ли как-то ограничить количество строк в таблице? Т.е. если у меня в таблице уже есть 10 строк, то 11ю мне SQLite API вставить не даст и выдаст ошибку. Если же удалить одну строку из таблицы с 10ю строками, то еще одну строчку вставить будет можно.
...
Рейтинг: 0 / 0
Максимальное количество строк
    #37588427
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
youmych,

Триггером. Например:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
sqlite> create table t (id integer not null primary key autoincrement, val text);
sqlite> create trigger t_bi before insert on t for each row begin
   ...> select case when (select count(*) from t) > 9 then raise(abort, "table full") end;
   ...> end;
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
sqlite> insert into t (val) values ('aaa');
SQL error: table full
sqlite> select count(*) from t;
10
sqlite> select * from t;
1|aaa
2|aaa
3|aaa
4|aaa
5|aaa
6|aaa
7|aaa
8|aaa
9|aaa
10|aaa
...
Рейтинг: 0 / 0
Максимальное количество строк
    #37676467
youmych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RXL, спасибо за совет.
Я нашел решение проще и более эффективное для своей задачи (о ней ниже).
Код: sql
1.
PRAGMA max_page_count = xxxx


Правда тут ограничить можно не с точностью до строки, а с точностью до страницы. Когда достигается данное ограничение, то sqlite3_step() возвращает SQLITE_FULL.

Видимо, я не совсем верно сформулировал задачу. Мне было необходимо как-то ограничивать размер файла БД, содержащего 4 таблицы, одна из которых очень большая (лог). Остальные таблицы не растут (справочники).
Первый вариант такого ограничения - постоянный контроль кол-ва строк в растушей таблице и удаление "старых" строк. Уважаемый RXL предложил как раз такой вариант, за что ему спасибо.

Второй вариант с PRAGMA мне подошел.

Хочу еще заметить на счет решения RXL. Есть подозрение, что на больщих таблицах оно будет притормаживать. Под большими таблицами я понимаю таблицы, размер которых в разы больше размера RAM. У меня ее всего 128 Мб, посему 500Мб-1Гб файл - это уже много.

В триггере содержится выражение SELECT COUNT(*) FROM t. Если его отдельно выполнять, то тормоза безбожные:

Код: sql
1.
2.
explain query plan select COUNT(*) from t"
0|0|0|SCAN TABLE t USING COVERING INDEX sqlite_autoindex_t_1(~1000000 rows)


Выполняется около 3 минут на 5 млн. таблице.
Еще хуже такой вариант (ValueID - PRIMARY KEY AUTOINCREMENT):

Код: sql
1.
2.
explain query plan select COUNT(ValueID) from t
0|0|0|SCAN TABLE t (~1000000 rows)


Возникает вопрос: какого не используются индексы?
...
Рейтинг: 0 / 0
Максимальное количество строк
    #37677712
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
youmych,

Ограничение страницами является ограничением по размеру файла. Оно не может гарантировать, что в базу поместится 10, а не 5 или не 105 строк. Также размер страниц может варьироваться от 512 до 65536 байт (зависит от версии и сборки).
...
Рейтинг: 0 / 0
Максимальное количество строк
    #37679190
youmych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RXL,

Да, я почитал документацию по поводу. Но, повторюсь, для моей задачи, где надо как-либо ограничить размер файла БД, этот способ предпочтительнее. Да и размер страницы задать не сложно
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Максимальное количество строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]