База данных и хранилище файловой системы с достаточно большими данными - PullRequest
0 голосов
/ 11 декабря 2018

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

Итак, у меня есть большой объем данных, который структурирован (данные содержат информацию о потоках в Соединенных Штатах, каждый поток имеет данные временных рядов, и все потоки идентифицируются уникальным идентификатором).Прямо сейчас он хранится в файлах NetCDF, и, чтобы избежать огромного файла, эти файлы разбиты на более мелкие сегменты.Прямо сейчас, если мы хотим получить доступ к данным только из одного потока (потому что не многие люди хотят видеть все 2,7 миллиона потоков одновременно), нам нужно пройтись по всем файлам NetCDF и извлечь данные только для этого одного потока.Мы также создали REST API (django-rest-framework), который делает то же самое для всех, кто вызывает конечные точки.

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

1 Ответ

0 голосов
/ 11 декабря 2018

Короткий ответ «возможно».

Более длинный ответ заключается в том, что это будет зависеть от нескольких факторов:
1. Правильное структурирование ваших данных.Это означает разделение несвязанных данных на отдельные документы, правильное создание связей между связанными данными и т. Д.
2. Правильная индексация ваших данных.Например, если у вас есть документы, представляющие отдельные «чанки» потока с «идентификатором потока», чтобы определить, к какому потоку принадлежат чанки, то наличие индекса для поля «идентификатор потока» гарантирует, что вы сможете эффективно захватить всекуски для этого потока.
3. Ресурсы, которые у вас есть.Возможно, вам придется изучить горизонтальное масштабирование базы данных, т. Е. Сегментирование, которое потребует от вас реального знания того, что вы делаете.Вы, вероятно, захотите, чтобы выделенный администратор баз данных просто занимался настройкой и обслуживанием данных, особенно для обеспечения репликации на месте, чтобы избежать потери одного узла, полностью уничтожающего ваш набор данных.Это будет стоить денег.
4. Ваша способность правильно и точно перенести все эти данные в базу данных.Один маленький пробел может означать, что вы пропустили важный фрагмент, или данные, которые должны быть связаны, не были, или данные введены неправильно, или как неправильный тип, или любое количество проблем.

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

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