Хранение больших объемов данных и доступ к ним

StackOverflow https://stackoverflow.com/questions/1739133

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top