LINUX.ORG.RU

История изменений

Исправление rumgot, (текущая версия) :

Глупости

Теоретически то алгоритмы плюс-минус такие же. Но.

Вот я сделал сравнительные замеры, чтобы обсуждение в ДА-НЕТ не скатывалось.

Дано. Две базы PostgreSQL и SQLite. Созданы через функционал Qt SQL. Вот запрос на создание таблиц:

const QString createTablesQuery =
    "CREATE TABLE IF NOT EXISTS test_table ("
    "id SERIAL PRIMARY KEY,"
    "t0 TEXT NOT NULL,"
    "t1 TEXT NOT NULL,"
    "t2 TEXT NOT NULL,"
    "v0 INTEGER NOT NULL,"
    "v1 INTEGER NOT NULL,"
    "v2 INTEGER NOT NULL,"
    "v3 INTEGER NOT NULL,"
    "v4 INTEGER NOT NULL,"
    "v5 INTEGER NOT NULL,"
    "v6 INTEGER NOT NULL,"
    "v7 INTEGER NOT NULL,"
    "v8 INTEGER NOT NULL,"
    "v9 INTEGER NOT NULL,"
    "v10 INTEGER NOT NULL,"
    "v11 INTEGER NOT NULL,"
    "v12 INTEGER NOT NULL,"
    "v13 INTEGER NOT NULL,"
    "v14 INTEGER NOT NULL"
    ")";

Заполнил случайными числами. Там где строки, значения получались из случайных чисел с плавающей точкой путем конвертирования случайного числа в строку.

Диск у меня SSD если что.

Вставил в таблицу в каждой базе 10000000 записей и замерял время вставки каждой записи. Так вот при росте базы роста времени вставки нет ни у SQLite (~2-4мс) ни у PostgreSQL(0-1мс).

А вот далее идет выборка и тут уже интереснее.

Запрос:

const QString selectQuery = "SELECT * FROM test_table where t0 = ''" /*здесь ставлю разные значения*/;

Так вот. Далее буду подставлять в запрос выше значения, соответствующие первой, средней и последней записям в таблицах и измерять в своей программе время выполнения запроса.

Вот результаты:

SQLitePostgreSQL
Первая запись< 1 ms322 ms
Средняя запись460 ms328 ms
Последняя запись880 ms306 ms

Данные значения получены с первого запуска и последующие запуски дают примерно такие цифры. Никаких средних я не находил.

Собственно выводы: получается, что в SQLite выборка похожа на поиск с линейной сложностью, т.е. перебор всех значений, тогда как в PostgreSQL похоже есть хэширование значений, раз уж время выполнения выборки единичных значений примерно постоянная и не зависит от количества записей (если я правильно понимаю). И таким образом просадки по производительности при росте базы SQLite все же будут.

Исправление rumgot, :

Глупости

Теоретически то алгоритмы плюс-минус такие же. Но.

Вот я сделал сравнительные замеры, чтобы обсуждение в ДА-НЕТ не скатывалось.

Дано. Две базы PostgreSQL и SQLite. Созданы через функционал Qt SQL. Вот запрос на создание таблиц:

const QString createTablesQuery =
    "CREATE TABLE IF NOT EXISTS test_table ("
    "id SERIAL PRIMARY KEY,"
    "t0 TEXT NOT NULL,"
    "t1 TEXT NOT NULL,"
    "t2 TEXT NOT NULL,"
    "v0 INTEGER NOT NULL,"
    "v1 INTEGER NOT NULL,"
    "v2 INTEGER NOT NULL,"
    "v3 INTEGER NOT NULL,"
    "v4 INTEGER NOT NULL,"
    "v5 INTEGER NOT NULL,"
    "v6 INTEGER NOT NULL,"
    "v7 INTEGER NOT NULL,"
    "v8 INTEGER NOT NULL,"
    "v9 INTEGER NOT NULL,"
    "v10 INTEGER NOT NULL,"
    "v11 INTEGER NOT NULL,"
    "v12 INTEGER NOT NULL,"
    "v13 INTEGER NOT NULL,"
    "v14 INTEGER NOT NULL"
    ")";

Заполнил случайными числами. Там где строки, значения получались из случайных чисел с плавающей точкой путем конвертирования случайного числа в строку.

Диск у меня SSD если что.

Вставил в таблицу в каждой базе 10000000 записей и замерял время вставки каждой записи. Так вот при росте базы роста времени вставки нет ни у SQLite (~2-4мс) ни у PostgreSQL(0-1мс).

А вот далее идет выборка и тут уже интереснее.

Запрос:

const QString selectQuery = "SELECT * FROM test_table where t0 = ''" /*здесь ставлю разные значения*/;

Так вот. Далее буду подставлять в запрос выше значения, соответствующие первой, средней и последней записям в таблицах и измерять в своей программе время выполнения запроса.

Вот результаты:

SQLitePostgreSQL
Первая запись< 1 ms322 ms
Средняя запись460 ms328 ms
Последняя запись880 ms306 ms

Данные значения получены с первого запуска и последующие запуски дают примерно такие цифры. Никаких средних я не находил.

Собственно выводы: получается, что в SQLite выборка похожа на поиск с линейной сложностью, т.е. перебор всех значений, тогда как в PostgreSQL похоже есть хэширование значений, раз уж время выполнения выборки единичных значений примерно постоянная и не зависит от количества записей (если я правильно понимаю). И таким образом просадки по производительности при росте базы SQLite все же будут.

Исправление rumgot, :

Глупости

Теоретически то алгоритмы плюс-минус такие же. Но.

Вот я сделал сравнительные замеры, чтобы обсуждение в ДА-НЕТ не скатывалось.

Дано. Две базы PostgreSQL и SQLite. Созданы через функционал Qt SQL. Вот запрос на создание таблиц:

const QString createTablesQuery =
    "CREATE TABLE IF NOT EXISTS test_table ("
    "id SERIAL PRIMARY KEY,"
    "t0 TEXT NOT NULL,"
    "t1 TEXT NOT NULL,"
    "t2 TEXT NOT NULL,"
    "v0 INTEGER NOT NULL,"
    "v1 INTEGER NOT NULL,"
    "v2 INTEGER NOT NULL,"
    "v3 INTEGER NOT NULL,"
    "v4 INTEGER NOT NULL,"
    "v5 INTEGER NOT NULL,"
    "v6 INTEGER NOT NULL,"
    "v7 INTEGER NOT NULL,"
    "v8 INTEGER NOT NULL,"
    "v9 INTEGER NOT NULL,"
    "v10 INTEGER NOT NULL,"
    "v11 INTEGER NOT NULL,"
    "v12 INTEGER NOT NULL,"
    "v13 INTEGER NOT NULL,"
    "v14 INTEGER NOT NULL"
    ")";

Заполнил случайными числами. Там где строки, значения получались из случайных чисел с плавающей точкой путем конвертирования случайного числа в строку.

Диск у меня SSD если что.

Вставил в таблицу в каждой базе 10000000 записей и замерял время вставки каждой записи. Так вот при росте базы роста времени вставки нет ни у SQLite (~2-4мс) ни у PostgreSQL(0-1мс).

А вот далее идет выборка и тут уже интереснее.

Запрос:

const QString selectQuery = "SELECT * FROM test_table where t0 = ''" /*здесь ставлю разные значения*/;

Так вот. Далее буду подставлять в запрос выше значения, соответствующие первой, средней и последней записям в таблицах и измерять в своей программе время выполнения запроса.

Вот результаты:

SQLitePostgreSQL
Первая запись< 1 ms322 ms
Средняя запись460 ms328 ms
Последняя запись880 ms306 ms

Данные значения получены с первого запуска и последующие запуски дают примерно такие цифры. Никаких средних я не находил.

Собственно выводы: получается, что в SQLite выборка похожа на поиск с линейной сложностью, т.е. перебор всех значений, тогда как в PostgreSQL похоже есть хэширование значений, раз уж время выполнения выборки единичных значений примерно постоянная и не зависит от количества записей (если я правильно понимаю). И таким образом просадки по производительности при росте базы SQLite все же будут.

Исправление rumgot, :

Глупости

Теоретически то алгоритмы плюс-минус такие же. Но.

Вот я сделал сравнительные замеры, чтобы обсуждение в ДА-НЕТ не скатывалось.

Дано. Две базы PostgreSQL и SQLite. Созданы через функционал Qt SQL. Вот запрос на создание таблиц:

const QString createTablesQuery =
    "CREATE TABLE IF NOT EXISTS test_table ("
    "id SERIAL PRIMARY KEY,"
    "t0 TEXT NOT NULL,"
    "t1 TEXT NOT NULL,"
    "t2 TEXT NOT NULL,"
    "v0 INTEGER NOT NULL,"
    "v1 INTEGER NOT NULL,"
    "v2 INTEGER NOT NULL,"
    "v3 INTEGER NOT NULL,"
    "v4 INTEGER NOT NULL,"
    "v5 INTEGER NOT NULL,"
    "v6 INTEGER NOT NULL,"
    "v7 INTEGER NOT NULL,"
    "v8 INTEGER NOT NULL,"
    "v9 INTEGER NOT NULL,"
    "v10 INTEGER NOT NULL,"
    "v11 INTEGER NOT NULL,"
    "v12 INTEGER NOT NULL,"
    "v13 INTEGER NOT NULL,"
    "v14 INTEGER NOT NULL"
    ")";

Заполнил случайными числами. Там где строки, значения получались из случайных чисел с плавающей точкой путем конвертирования случайного числа в строку.

Диск у меня SSD если что.

Вставил в таблицу в каждой базе 10000000 записей и замерял время вставки каждой записи. Так вот при росте базы роста времени вставки нет ни у SQLite (~2-4мс) ни у PostgreSQL(0-1мс).

А вот далее идет выборка и тут уже интереснее.

Запрос:

const QString selectQuery = "SELECT * FROM test_table where t0 = ''" /*здесь ставлю разные значения*/;

Так вот. Далее буду подставлять в запрос выше значения, соответствующие первой, средней и последней записям в таблицах и измерять в своей программе время выполнения запроса.

Вот результаты:

SQLitePostgreSQL
Первая запись< 1 ms322 ms
Средняя запись460 ms328 ms
Последняя запись880 ms306 ms

Данные значения получены с первого запуска и последующие запуски дают примерно такие цифры. Никаких средних я не находил.

Собственно выводы: получается, что в SQLite выборка похожа на поиск с линейной сложностью, т.е. перебор всех значений, тогда как в PostgreSQL похоже есть хэширование значений, раз уж время выполнения выборки единичных значений примерно постоянная и не зависит от количества записей (если я правильно понимаю). И таким образом просадки по производительности при росте базы SQLite все же будут.

Исправление rumgot, :

Глупости

Теоретически то алгоритмы плюс-минус такие же. Но.

Вот я сделал сравнительные замеры, чтобы обсуждение в ДА-НЕТ не скатывалось.

Дано. Две базы PostgreSQL и SQLite. Созданы через функционал Qt SQL. Вот запрос на создание таблиц:

const QString createTablesQuery =
    "CREATE TABLE IF NOT EXISTS test_table ("
    "id SERIAL PRIMARY KEY,"
    "t0 TEXT NOT NULL,"
    "t1 TEXT NOT NULL,"
    "t2 TEXT NOT NULL,"
    "v0 INTEGER NOT NULL,"
    "v1 INTEGER NOT NULL,"
    "v2 INTEGER NOT NULL,"
    "v3 INTEGER NOT NULL,"
    "v4 INTEGER NOT NULL,"
    "v5 INTEGER NOT NULL,"
    "v6 INTEGER NOT NULL,"
    "v7 INTEGER NOT NULL,"
    "v8 INTEGER NOT NULL,"
    "v9 INTEGER NOT NULL,"
    "v10 INTEGER NOT NULL,"
    "v11 INTEGER NOT NULL,"
    "v12 INTEGER NOT NULL,"
    "v13 INTEGER NOT NULL,"
    "v14 INTEGER NOT NULL"
    ")";

Заполнил случайными числами. Там где строки, значения получались из случайных чисел с плавающей точкой путем конвертирования случайного числа в строку.

Диск у меня SSD если что.

Вставил в таблицу в каждой базе 10000000 записей и замерял время вставки каждой записи. Так вот при росте базы роста времени вставки нет ни у SQLite (~2-4мс) ни у PostgreSQL(0-1мс).

А вот далее идет выборка и тут уже интереснее.

Запрос:

const QString selectQuery = "SELECT * FROM test_table where t0 = ''" /*здесь ставлю разные значения*/;

Так вот. Далее буду подставлять в запрос выше значения, соответствующие первой, средней и последней записям в таблицах и измерять в своей программе время выполнения запроса.

Вот результаты:

SQLitePostgreSQL
Первая запись0 ms322 ms
Средняя запись460 ms328 ms
Последняя запись880 ms306 ms

Данные значения получены с первого запуска и последующие запуски дают примерно такие цифры. Никаких средних я не находил.

Собственно выводы: получается, что в SQLite выборка похожа на поиск с линейной сложностью, т.е. перебор всех значений, тогда как в PostgreSQL похоже есть хэширование значений, раз уж время выполнения выборки единичных значений примерно постоянная и не зависит от количества записей (если я правильно понимаю). И таким образом просадки по производительности при росте базы SQLite все же будут.

Исходная версия rumgot, :

Глупости

Теоретически то алгоритмы плюс-минус такие же. Но.

Вот я сделал сравнительные замеры, чтобы обсуждение в ДА-НЕТ не скатывалось.

Дано. Две базы PostgreSQL и SQLite. Созданы через функционал Qt SQL. Вот запрос на создание таблиц:

const QString createTablesQuery =
    "CREATE TABLE IF NOT EXISTS test_table ("
    "id SERIAL PRIMARY KEY,"
    "t0 TEXT NOT NULL,"
    "t1 TEXT NOT NULL,"
    "t2 TEXT NOT NULL,"
    "v0 INTEGER NOT NULL,"
    "v1 INTEGER NOT NULL,"
    "v2 INTEGER NOT NULL,"
    "v3 INTEGER NOT NULL,"
    "v4 INTEGER NOT NULL,"
    "v5 INTEGER NOT NULL,"
    "v6 INTEGER NOT NULL,"
    "v7 INTEGER NOT NULL,"
    "v8 INTEGER NOT NULL,"
    "v9 INTEGER NOT NULL,"
    "v10 INTEGER NOT NULL,"
    "v11 INTEGER NOT NULL,"
    "v12 INTEGER NOT NULL,"
    "v13 INTEGER NOT NULL,"
    "v14 INTEGER NOT NULL"
    ")";

Заполнил случайными числами. Там где строки, значения получались из случайных чисел с плавающей точкой путем конвертирования случайного числа в строку.

Диск у меня SSD если что.

Вставил в таблицу в каждой базе 10000000 записей и замерял время вставки каждой записи. Так вот при росте базы роста времени вставки нет ни у SQLite (~2-4мс) ни у PostgreSQL(0-1мс).

А вот далее идет выборка и тут уже интереснее.

Запрос:

const QString selectQuery = "SELECT * FROM test_table where t0 = ''" /*здесь ставлю разные значения*/;

Так вот. Далее буду подставлять в запрос выше значения, соответствующие первой, средней и последней записям в базах и измерять в своей программе время выполнения запроса.

Вот результаты:

SQLitePostgreSQL
Первая запись0 ms322 ms
Средняя запись460 ms328 ms
Последняя запись880 ms306 ms

Данные значения получены с первого запуска и последующие запуски дают примерно такие цифры. Никаких средних я не находил.

Собственно выводы: получается, что в SQLite выборка похожа на поиск с линейной сложностью, т.е. перебор всех значений, тогда как в PostgreSQL похоже есть хэширование значений, раз уж время выполнения выборки единичных значений примерно постоянная и не зависит от количества записей (если я правильно понимаю). И таким образом просадки по производительности при росте базы SQLite все же будут.