Лучшая база данных DataMining

Я – случайный программист Python, который до сих пор работал с базами данных MYSQL или SQLITE. Я компьютерный человек для всего, что есть в небольшой компании, и я начал новый проект, когда, думаю, пришло время попробовать новые базы данных.

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

Я думал об использовании mysql, но тогда мне нужно установить mysql на каждом рабочем столе, sqlite проще, но он очень медленный. Мне не нужна полная реляционная база данных, просто какой-то способ игры с большими объемами данных в приличное время.

Обновление: я думаю, что я не очень подробно рассказывал о моем использовании базы данных, тем самым плохо объясняя мою проблему. Я работаю над чтением всех данных ~ 900 Megas или более из csv в словарь Python, а затем работаю с ним. Моя проблема заключается в том, чтобы хранить и в основном быстро считывать данные.

Большое спасибо!

Краткое резюме

  • Вам достаточно памяти (ОЗУ) для эффективного решения вашей проблемы. Я думаю, вы должны обновить память? При чтении превосходного блога высокой масштабируемости вы заметите, что для больших сайтов, чтобы эффективно решить проблему, они сохраняют полную проблему, заданную в памяти.
  • Вам нужно решение для центральной базы данных. Я не думаю, что рука, выполняющая это только с помощью словаря python, выполнит свою работу.
  • Как решить «вашу проблему» зависит от вашего «запроса». Сначала я постараюсь сделать ваши данные в поиске эластичности (см. Ниже) и запросить базу данных (см., Как она выполняется). Я думаю, что это самый простой способ решить вашу проблему. Но, как вы можете прочитать ниже, есть много способов решить вашу проблему.

Мы знаем:

  • Вы использовали python в качестве языка вашей программы.
  • Ваша база данных ~ 900 МБ (я думаю, что она довольно большая, но абсолютная управляемая).
  • Вы загрузили все данные в словарь python. Здесь я предполагаю, что проблема лежит. Python пытается хранить словарь (также словарь python не является наиболее запоминающимся в памяти) в вашей памяти, но у вас недостаточно памяти ( сколько у вас памяти? ). Когда это произойдет, у вас будет много виртуальной памяти . Когда вы пытаетесь прочитать словарь, вы постоянно меняете данные с вашего диска в память. Эта замена вызывает « Trashing ». Я предполагаю, что на вашем компьютере не хватает Рама. Если true, то я бы сначала обновил свою память с объемом оперативной памяти не менее 2 гигабайт. Когда ваш набор проблем способен справиться с проблемой памяти, проблема будет намного быстрее. Я открыл книгу по компьютерной архитектуре, где (иерархия памяти) говорит, что время доступа к основной памяти составляет около 40-80 нс, а время доступа к памяти – 5 мс. Это БОЛЬШАЯ разница.

Недостающая информация

  • У вас есть центральный сервер. Вы должны использовать / иметь сервер.
  • Какая архитектура имеет ваш сервер? Linux / Unix / Windows / Mac OSX? На мой взгляд, ваш сервер должен иметь архитектуру linux / Unix / Mac OSX.
  • Сколько памяти у вашего сервера?
  • Не могли бы вы указать свой набор данных (CSV) немного лучше.
  • Какую добычу данных вы делаете? Вам нужны возможности полнотекстового поиска? Я не предполагаю, что вы выполняете сложные (SQL) запросы. Выполнение этой задачи только с помощью словарей python будет сложной проблемой. Не могли бы вы формализовать запрос, который вы хотели бы выполнить? Например:
    • "get all users who work for departement x"
    • "get all sales from user x"

Необходима база данных

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

Вы уверены, что вам нужна база данных для решения вашей проблемы. Сделать это самостоятельно, используя только словарь python, сложно. Особенно, когда ваш набор проблем не может поместиться в памяти.

MySQL

Я думал об использовании mysql, но тогда мне нужно установить mysql на каждом рабочем столе, sqlite проще, но он очень медленный. Мне не нужна полная реляционная база данных, просто какой-то способ игры с большими объемами данных в приличное время.

Централизованная (клиент-серверная) база данных – это именно то, что вам нужно для решения вашей проблемы. Позвольте всем пользователям получить доступ к базе данных с одного ПК, которым вы управляете. Вы можете использовать MySQL для решения вашей проблемы .

Токийский тиран

Вы также можете использовать Tokyo Tyrant для хранения всех ваших данных. Tokyo Tyrant довольно быстро, и его не нужно хранить в ОЗУ. Он обрабатывает получение данных более эффективно (вместо использования словаря python). Однако, если ваша проблема может полностью соответствовать памяти, я думаю, вам стоит взглянуть на Redis (см. Ниже).

Redis:

Например, можно использовать Redis (быстрый запуск через 5 минут) (Redis очень быстрый), чтобы сохранить все продажи в памяти. Redis чрезвычайно эффективен и может делать подобные запросы безумно быстро. Единственная проблема с Redis заключается в том, что он должен полностью вписываться в ОЗУ , но я считаю, что он работает над этим (ночная сборка уже поддерживает его). Также, как я уже говорил ранее, решение проблемы, полностью заданной из памяти, заключается в том, как крупные сайты решают там проблему своевременно.

Хранилища документов

В этой статье делается попытка оценить kv-магазины с хранилищами документов, такими как couchdb / riak / mongodb. Эти магазины лучше способны искать (немного медленнее, чем магазины KV), но не подходят для полнотекстового поиска.

Полный текст-поиск

Если вы хотите выполнять полнотекстовые поисковые запросы, вы можете:

  • elasticsearch (видео) : Когда я увидел видео-демонстрацию elasticsearch, он выглядел довольно круто. Вы можете попробовать поставить (поместить простой json) свои данные в elasticsearch и посмотреть, насколько это быстро. Я следую elastissearch на github, и автор приносит ему много нового кода.
  • solr (tutorial) : Многие крупные компании используют solr (github, digg) для поиска там. Они получили большой толчок от полнотекстового поиска MySQL до solr.

Вероятно, вам понадобится полная реляционная СУБД, если не сейчас, очень скоро. Если вы начнете сейчас, когда ваши проблемы и данные просты и понятны, тогда, когда они станут сложными и трудными, у вас будет много опыта работы с хотя бы одной СУБД, чтобы помочь вам. Вероятно, вам не нужен MySQL на всех настольных компьютерах, вы можете установить его на сервере, например, и подавать данные по вашей сети, но вам, возможно, потребуется предоставить дополнительную информацию о ваших требованиях, наборе инструментов и оборудовании, чтобы получить лучшие предложения.

И, хотя у других СУБД есть свои сильные и слабые стороны, нет ничего плохого в MySQL для больших и сложных баз данных. Я не знаю достаточно о SQLite, чтобы прокомментировать это.

EDIT: @ Эрик из ваших комментариев к моему ответу и другим ответам, я еще более убеждаюсь в том, что пришло время переместить в базу данных. Я не удивлен, что попытка выполнить операции с базой данных на 900-мегабайтном Python-словаре медленна. Я думаю, вы должны сначала убедить себя, а затем ваше руководство, что вы достигли предела того, с чем может справиться ваш нынешний инструментарий, и что будущие события находятся под угрозой, если вы не переосмыслите ситуацию.

Если ваша сеть действительно не может поддерживать серверную базу данных, чем (а), вам действительно необходимо сделать вашу сеть надежной, надежной и эффективной для такой цели, но (б) если это не вариант или не ранний вариант, вы должны думать вдоль линий центрального сервера базы данных, передавая дайджесты / выдержки / отчеты другим пользователям, а не одновременно, полную СУРБД, работающую в конфигурации клиент-сервер.

Проблемы, с которыми вы в настоящее время сталкиваетесь, – это проблемы отсутствия правильных инструментов для работы. Они только ухудшатся. Хотел бы я предложить волшебный способ, в котором это не так, но я не могу, и я не думаю, что кто-то еще это сделает.

Вы сделали какую-либо маркировку для проверки, чтобы подтвердить, что это текстовые файлы, которые замедляют вас? Если вы этого не сделали, есть хорошая вероятность, что настройка другой части кода ускорит процесс, чтобы он был достаточно быстрым.

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

Вместо того, чтобы передавать сотни мегабайт всем пользователям вашей сети, почему бы не хранить ваши данные в MySQL и не делить эти данные в базу данных, где они могут быть нормализованы и доступны для всех?

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

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