Хранилище данных и большие данные

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

Поскольку исходники имеют размер порядка 250 ГБ (на таблицу), я думаю, мы находимся в области больших данных.

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

Я знаю об Apache Drill, но он не может запрашивать ежедневные снимки (см. пример в связанном вопросе).

Ответы (2)

Читая этот пост и другой ваш пост, я не совсем понимаю, почему вы считаете, что он должен быть без схемы. Термин «без схемы» обычно используется с большими данными (в частности, с Hadoop), когда у вас есть данные, поступающие из нескольких источников, которые вы хотите загрузить в хранилище данных для последующего использования. Затем вы настраиваете схему, когда будете готовы использовать данные.

Для ваших больших наборов данных вы упомянули о ежедневных моментальных снимках, и хотя это сработает, в конечном итоге вы столкнетесь с огромными накладными расходами в объеме данных. Лучший вариант — включить сбор данных об изменениях (CDC). CDC будет регистрировать только изменения данных, а не делать полный снимок всего, что в них есть. Таким образом, вы не тратите место на все неизмененные записи. Некоторые формы CDC поддерживаются большинством современных движков баз данных, но есть и сторонние инструменты, которые могут это сделать.

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

Вы не получите (обычных) соединений в базе данных, такой как MongoDB, так что это исключено, но почему неспособность заранее знать запросы обязательно должна подразумевать отсутствие схемы? В конце концов , ваши данные имеют некоторую структуру?

Судя по ссылке на другой вопрос, вам нужен быстрый текстовый поиск (LIKE/ILIKE?).

Что ж, для этого новые версии Postgres вполне подойдут, если вы используете pg_trgmрасширение ( http://www.postgresql.org/docs/9.1/static/pgtrgm.html ). Он реализует поиск по индексу (в отличие от последовательного сканирования) с оператором LIKE/ILIKE с подстановочными знаками.

Благодаря этому расширению мне удалось создать феноменально быструю поисковую систему в базе данных PG размером ~ ТБ.

Я также написал логический механизм запросов, используя pyparsingмодуль Python, который имеет типичные операторы AND, OR, NOTи ключевые слова, соответствующие ( pg_trgm-индексированным) столбцам. Он переводит высокоуровневый запрос в SQL (фактически SQLAlchemy Core SQL Expressions). Таким образом, вы можете достаточно гибко запрашивать БД, при этом очень быстро получая результаты. Я не знаю, нужна ли вам функциональность, подобная поисковой системе, но я уверен, что грамматику для этого можно было бы довольно легко разработать с помощью pyparsing.

Если вам нужно что-то, связанное с числовыми вычислениями, PyTables чрезвычайно быстр для работы с наборами данных, не занимающими памяти (хотя операторы строкового поиска здесь несколько рудиментарны).