Высокопроизводительное решение для базы данных для хранения простых данных в Windows - PullRequest
0 голосов
/ 25 февраля 2011

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

  • У меня ежедневно около 1 миллиона новых записей, каждая запись состоит из record_name (строка, около 20 символов), date, value, записи хранятся около двух лет (~ 700 млн записей в базе данных);
  • большинство record_names повторяются каждый день;
  • Мне нужно иметь возможностьчтобы найти наибольшее значение прироста между указанными датами, сохраняя при этом возможность фильтровать результаты путем подстановки record_name;
  • программного обеспечения, работающего с этим, должно работать в Windows XP.
  • самое важное - время выполнения каждого запроса.

До сих пор я пробовал базу данных MySQL и Cassandra.В то время как MySQL имеет довольно приемлемую производительность в Linux (под приемлемым я имею в виду, что мои не очень высокие навыки были достаточны для программирования чего-то, что работает), в Windows это очень медленно.То же самое и с Кассандрой.

Данные, которые вставляются в эти базы данных, импортируются из файлов .csv.Первый импорт занимает около 5 минут для MySQL и 20 минут для Cassandra, последние занимают больше времени.Я подозреваю, что, возможно, я что-то неправильно настроил, но, если честно, я ничего не изменил в файлах конфигурации, связанных с производительностью.

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

Большое спасибо за интерес к помощи.

Ответы [ 4 ]

2 голосов
/ 25 февраля 2011

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

Сначала я бы задал простой вопрос - нужны ли вам все данные в БД? Я хотел бы просто приготовить различные агрегаты - все, тип записи и т. Д. По временному диапазону, например. днем или часом в более простые, меньшие наборы строк, использующие простые консольные приложения для чтения строк, вычисления агрегатов, а затем выгрузки их в SQL для доступа по запросу.

Хотя это круто, чтобы выбрать * во всех рядах - если нет реальной потребности бизнеса, не поддавайтесь этому. Имея в виду агрегированные запросы, хранение No-SQL отвлекает, простые старые файлы отлично подойдут для хранения хранилища необработанных строк, а таких инструментов, как SQL, более чем достаточно для агрегированных запросов.

1 голос
/ 25 февраля 2011

Другой вариант для рассмотрения - Berkeley DB . Это маленький, быстрый, масштабируемый и очень легкий. Он поддерживает различные API, включая SQL, пары ключ-значение (NoSQL) и API персистентности Java Object. Вообще говоря, Berkeley DB превзойдет RDBMS общего назначения, потому что она намного меньше, более эффективна и имеет гораздо меньше накладных расходов. Berkeley DB работает на Windows и является отличным выбором для разработчиков, которые ищут простое, удобное в использовании встроенное управление данными.

1 голос
/ 25 февраля 2011

Сначала нужно определить узкое место.Возможные варианты: жесткий диск, база данных, драйвер, код приложения.Вам также следует попробовать postresql, но, честно говоря, ваш выбор надежной работы в Windows невелик.если вы не используете Windows SQL Server (не бесплатно).Также Cassandra и MySql ОЧЕНЬ разные и решают разные проблемы.

0 голосов
/ 01 марта 2011

SQL Server Express должен соответствовать вашим потребностям.

Просто объедините данные - используйте SQL, чтобы получить нужные значения и сохранить их в других таблицах.

Используя этот метод, вы легко сможете обойти любые проблемы с производительностью и ограничениями размера с помощью SQL Express.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...