Программа работает под управлением SQLite базы данных и конечному пользователю необходимо выбрать какой использовать индекс:
1 вариант: индекс только на email - данный вариант уменьшит объем базы данных на каждые 1кк строк на 7-10 мегабайт максимум и уменьшит скорость проверки баз данных (без добавления)
2 вариант: индекс на email и password - данный вариант увеличит объем базы данных на каждые 1кк строк на 7-10 мегабайт максимум и увеличит скорость проверки баз данных (без добавления)
Тестовая система:
CPU: i9-9900k
RAM: 48Gb 3200Mhz
SSD: NVMe 1Tb Samsung 970 EVO: I/O -> 3.4Gbs/2.5Gbs
Тесты:
1кк база данных 35 739 212 байт
1 вариант чтение 140к строк: 01:01.1954145, размер файла: 77 808 байт
2 вариант чтение 140к строк: 00:42.3273982, размер файла: 89 772 байт
Запись в обоих случаях производится за ~3 секунды. Без предварительной проверки запись в базу данных не возможна ввиду архитектурных ограничений.
Я настоятельно рекомендую использовать второй вариант работы ввиду того, что я предполагаю, что будет деградация производительности на системе, которая ниже по характеристикам тестового стенда.
В архиве находится программа, конфиг и dll библиотека, которая была собрана мной с определенными флагами. На дистанции она работает быстрее на 2-5 секунды, но если у вас деградация в производительности рекомендую скачать актуальную библиотеку для x64 систем с заменой текущей dll библиотеки со следующего сайта:
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
Программа реализована только для систем x64, для x86 - просите отдельно, возможно, сделаю.
Ахтунг!
Мне нужна ваша материальная поддержка для реализации последующего функционала. Данный проект отнял у меня неделю вечеров, так как работа SQLite хоть и предполагает многопоточный доступ к данным, но это не так. Каждый последующий открытый коннект блокируется и мы можем наблюдать очередь, которая в свое время может привести к деградации работы алгоритма, поэтому программа работает на 1 потоке с моей собранной библиотекой. Проведена колоссальная работа по оптимизации как самой библиотеки, так и используемых компонентов для достижения максимальной работы вставки и поиска по базе данных sqlite.
В ближайшем будущем я планирую реализовать многопоточную работу программы со следующими СУБД: mysql, postgresql + возможно прикручу elasticsearch. На данные наполеоновские планы у меня пока нет мотивации, но вы можете мне помочь ее найти, если отправите любой донат на мой BTC: 1PPkLqzsGtmGhrraHpw3PHn88hVRjXGDXG
Для меня 1$ уже будет весомым аргументом начать совершенствовать функционал. Цените и уважайте чужой труд, я не смогу все всегда делать бесплатно. Если наберется достаточно большая аудитория у данного проекта - я начну реализацию дополнительного функционала.