Хранение больших объемов данных и доступ к ним
-
20-09-2019 - |
Вопрос
Мое приложение создает фрагменты данных, которые в формате xml выглядели бы следующим образом:
<resource url="someurl">
<term>
<name>somename</name>
<frequency>somenumber</frequency>
</term>
...
...
...
</resource>
Вот как я сейчас храню эти "ресурсы".Ресурс для каждого XML-файла.Столько "терминов" на каждый "ресурс", сколько необходимо.Проблема в том, что мне нужно будет сгенерировать около 2 миллионов таких ресурсов.Я сгенерировал почти 500 000, и мой Mac не очень доволен этим.Итак, мой вопрос заключается в следующем:как я должен хранить эти данные?
- База данных?это было бы сложно, потому что структура данных не является фиксированной...
- Может быть, объединить некоторые ресурсы в большие XML-файлы?
- ...?
Мне не нужно изменять данные после их создания.Прямо сейчас я обращаюсь к определенному ресурсу по имени файла этого ресурса.
Любые предложения будут с благодарностью приняты!
Решение
Не все базы данных являются реляционными.Взгляните, например, на mongodb.Он хранит ваши данные в виде json-подобных объектов, похожих на ваши ресурсы.
Пример использования оболочки:
$ mongo
> db.resources.save({url: "someurl",
terms: [{name: "name1", frequency: 17.0},
{name: "name2", frequency: 42.0}]})
> db.resources.find()
{"_id" : ObjectId( "4b00884b3a77b8b2fa3a8f77"),
"url" : "someurl" ,
"terms" : [{"name" : "name1" , "frequency" : 17},
{"name" : "name2" , "frequency" : 42}]}
Другие советы
Если вы не можете предсказать, как будут организованы ваши данные, возможно http://couchdb.apache.org/ может быть интересным для вас.Это база данных без схемы.
В любом случае, XML, возможно, не лучший выбор для большого объема данных.
Может быть, попробовать JSON или YAML получится лучше?Им требуется меньше места, и их легче анализировать (однако у меня нет опыта использования этих форматов в больших масштабах.Может быть, я ошибаюсь).
У вас должно быть определенно несколько ресурсов для каждого XML-файла, но только в том случае, если ожидается, что вы будете использовать все ресурсы одновременно.Если вам нужно отправить кому-либо только пригоршню ресурсов, продолжайте создавать отдельный XML-файл.
Даже в этой ситуации вы могли бы сохранить большой XML-файл и сгенерировать по запросу файлы меньшего размера из исходного набора данных.
Использование базы данных, подобной SQLite3, позволит вам ускорить поиск и упростить манипулирование данными, используя синтаксис SQL.