Насколько быстр SQLite через Python

#python #sqlite #data-structures

#python #sqlite #структуры данных

Вопрос:

Мне было просто любопытно, может ли кто-нибудь сказать мне, было ли эффективным методом использование SQLite для хранения словаря (как в грубой силе) для использования в скрипте Python. Хотя я относительно новичок в Python, у меня есть довольно большой опыт работы с другими языками программирования, и в настоящее время я работаю над инструментом пентестирования для использования в Backtrack. Пока что я весьма впечатлен скоростью и простотой Python, и мои SQL-запросы, похоже, работают довольно идеально, чтобы возвращать необходимые префиксы для моего инструмента грубой силы. Однако, я думаю, мне интересно, каков стандарт для хранения больших файлов данных в Python? Я упускаю из виду лучший (более быстрый) способ хранения моих префиксов просто из-за моего удобства с SQL? Пожалуйста, имейте в виду, что я не использую Python для запроса идентификаторов от 0 до n и использую их, скорее я использую Python для сужения возможностей и запроса тех словарных записей, которые соответствуют критериям. Любая помощь или мнения будут высоко оценены!

Комментарии:

1. Как быстро вы хотели бы, чтобы это было? Насколько велик набор данных в МБ, ГБ, ТБ? Что вы подразумеваете под «префиксами», это как в «дереве префиксов» (trie)? Насколько хорошо операции, которые вы выполняете с данными, соответствуют реляционной модели?

Ответ №1:

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

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

Предлагаемые и подходящие варианты использования sqlite в качестве хранилища данных описаны на их веб-сайте:http://www.sqlite.org/features.html

Ответ №2:

Если Raymond Hettinger также рекомендует SQLite, то это, вероятно, ваш лучший выбор.

Но родным решением Python было бы использовать файл «pickle». Вы бы создали Python dict , который хранит данные, затем «рассортировали» dict; позже вы могли бы «рассортировать» dict. Если у вас есть только один ключ, по которому вам нужно выполнить поиск, то, возможно, это хороший способ.

Для Python 2.x вы, вероятно, захотите использовать cPickle модуль. Для Python 3.x есть только pickle , но я считаю, что это так же быстро, как cPickle .

http://docs.python.org/library/pickle.html

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

Ответ №3:

Не по теме, вот несколько полезных ссылок.

THC-Hydra😛

Также вот отличное видео о политике паролей и использовании then для грубой силы.

http://www.irongeek.com/i.php?page=videos/hack3rcon2/martin-bos-your-password-policy-sucks