Я хочу эффективно записать матрицу 75000x10000 с плавающими значениями в базу данных - PullRequest
0 голосов
/ 17 июня 2019

спасибо, что выслушали меня.

У меня есть набор данных, представляющий собой матрицу формы 75000x10000, заполненную значениями с плавающей точкой.Думайте об этом как тепловая карта / матрица корреляции.Я хочу сохранить это в базе данных SQLite (SQLite, потому что я изменяю существующий проект Django ).Файл исходных данных имеет размер 8 ГБ, и я пытаюсь использовать python для выполнения моей задачи.

У меня есть , пытался использовать chunking панд , чтобы прочитатьфайл в python и преобразовать его в непакетированные попарно индексированные данные и записать в файл json.Но этот метод пожирает мои вычислительные затраты.Для фрагмента размером 100x10000 он создает файл json размером 200 МБ.

Этот файл json будет использоваться в качестве приспособления для формирования базы данных SQLite в бэкэнде Django.

Есть ли лучшеспособ сделать это?Быстрее / Умнее. Я не думаю, что стоит использовать лишний json-файл объемом 90 ГБ, записанный за полный день.Даже не уверен, что базы данных Django могут принять эту нагрузку.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 18 июня 2019

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

Что еще более важно, забудьте об использовании моделей Django для чего-то подобного;они представляют собой уровень абстракции, созданный для удобства (отображение записей базы данных в объекты Python), а не для повышения производительности.Django очень быстро захлебнется, пытаясь построить сотни миллионов объектов, поскольку он не понимает, чего вы пытаетесь достичь.

Вместо этого вы захотите использовать тип / механизм базы данных, который подходит длятип запросов, которые вы хотите сделать;если типовой запрос состоит из сотен точечных запросов для получения данных в определенных «ячейках», хранилище значений ключа может быть идеальным;если вы обычно выбираете диапазоны значений в отдельных «строках» или «столбцах», то это то, что нужно оптимизировать;если ваши запросы обычно включают в себя использование подматриц и выполнение предсказуемых операций над ними, вы можете значительно повысить производительность, предварительно рассчитав определенные кумулятивные значения;и если вы хотите использовать полный набор данных для обучения моделям машинного обучения, вам, вероятно, лучше вообще не использовать базу данных для основного хранилища (поскольку базы данных по своей природе жертвуют быстрым извлечением полных необработанных данных для быстрого-calculations-on-интересно-подмножества), особенно если ваши модели ML можно распараллелить, используя что-то вроде Spark.

Ни одна БД не справится со всем хорошо, поэтому было бы полезно, если бы вы могли уточнить рабочую нагрузку, которую вы 'Поверх этих данных будет работать - какие вопросы вы хотите задать?

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