Рубрики
Без рубрики

GSOC 20: неделя 3

Привет всем, это снова Niraj снова и сегодня я буду делиться своим вкладом кода третьей недели … Помечено Python, GSOC, OpenSource.

Привет всем, это Niraj снова и сегодня я буду делиться своим вкладом кода третьей недели GSOC.

Задний план

В настоящее время у нас есть модуль с именем Cvedb который содержит функцию, которая загружает CVE наборы данных из База данных национальной уязвимости (NVD) И храните его в каталоге кэша пользователя ( ~/.Cache ). После загрузки целых наборов данных он предварительно обрабатывает и извлекает необходимую информацию из наборов данных и заполняет локальную базу данных SQLite с ней. Он также содержит другие функции для удаления кэшированных данных, обновляя устаревшие данные, инициализируя базу данных, если она пуста и т. Д.

Что я сделал на этой неделе?

Я сделал Cvedb Модуль асинхронный в течение этой недели. В настоящее время мы используем мультипроцессию для загрузки данных, которые не нужны, поскольку загрузка – это задача, связанная с io и для задачи, связанной с io асинсио лучше решение. Сначала я подумал, что хранение целых наборов данных не требуется, так как у нас уже наполнена база данных SQLite. После заполнения базы данных мы используем его только для проверки, если наборный набор устаревшин, и для этого мы находим SHA Sum The Cached DataSet и сравнивая его с последней суммой SHA, перечисленной в метаданных с сайта NVD. Мы можем сэкономить значительное пространство, просто сохраняя SHA Sum данных каждого набора данных из сайта NVD и сравнить его вместо этого, но мой наставник указывал, что она и другие – это иногда используют эти необработанные данные для анализа. Итак, я решил продолжить хранение наборов данных, и в будущем мы можем предоставить вариант для отключения кэширования целых наборов данных.

Я разделил класс который создает базу данных ( Cvedb ) из класс которые предоставляют методы для запроса базы данных ( CVescanner ) для лучшего обслуживания. Я использую AioHTTP Для загрузки наборов данных сейчас. Я также попробовал использовать AIOSQLITE Для заполнения базы данных, но это было значительно медленнее, чем его синхронный аналог. Я подозреваю, что это поведение было результатом отсутствия перекрывающихся задач IO. Я могу увеличить параллелизм, нередив несколько задач, но это значительно увеличивает использование памяти. Таким образом, только способ сохранить память в проверке было обновление базы данных синхронно. Ну, есть еще один способ, но требует загрузки синхронно и вместо того, чтобы сохранить данные на использование диска в очереди памяти в качестве трубопровода, чтобы подавать данные для заполнения базы данных задач. Существуют и другие способы оптимизации эффективности, такие как отключение журналирования базы данных, создавая большую транзакцию оператора INSERT и коммитарию, несколько потребителей (задачи, которые заполняют базу данных). Я буду экспериментировать с этими методами в будущем, но в настоящее время я доволен производительностью AioHTTP Для асинхронного загрузки и синхронного обновления базы данных с SQLite3 модуль. До сих пор я еще не создал PR, потому что upstream build имеет ошибки, и я должен ждать, пока патч за это получается слияние.

Что я делаю на этой неделе?

Согласно моей графике, я бы завершил свою работу над параллелизмом, сделав наш последний модуль Сканер асинхронные, но мои наставники хотят, чтобы я начнул делать свою работу на Inputendine Поскольку пользователи запрашивают эту функцию. Итак, я мог бы начать это первым. Завтра обсудим будущие планы на виртуальной конференции.

Я сообщу вам о моих будущих планах на следующей неделе. Итак, оставайся настроенными. Увидимся на следующей неделе.

Оригинал: “https://dev.to/nirajkamdar/gsoc-20-week-3-487l”