Хранение и доступ к большим объемам данных - PullRequest
0 голосов
/ 16 ноября 2009

Мое приложение создает фрагменты данных, которые в xml выглядят так:

<resource url="someurl">
   <term>
      <name>somename</name>
      <frequency>somenumber</frequency>
   </term>    
   ...
   ...
   ...
</resource>

Вот как я сейчас храню эти "ресурсы". Ресурс на файл XML. Столько «термин» за «ресурс», сколько необходимо. Проблема в том, что мне нужно создать около 2 миллионов этих ресурсов. Я сгенерировал почти 500.000, и мой макинтош не очень доволен этим. Поэтому мой вопрос: как мне хранить эти данные?

  • База данных? это было бы сложно, потому что структура данных не фиксирована ...
  • Может быть, объединить некоторые ресурсы в большие файлы XML?
  • ...

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

Любые предложения приветствуются!

Ответы [ 3 ]

1 голос
/ 16 ноября 2009

Если вы не можете предсказать, как ваши данные будут организованы, возможно, http://couchdb.apache.org/ может быть интересным для вас. Это база данных без схемы.

В любом случае, XML, возможно, не лучший выбор для большого количества данных.

Может быть, лучше попробовать JSON или YAML? Им нужно меньше места, и их легче анализировать (однако у меня нет опыта использования этих форматов в большем масштабе. Может быть, я ошибаюсь).

1 голос
/ 16 ноября 2009

Не все базы данных являются реляционными.Посмотрите, например, 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}]}
0 голосов
/ 16 ноября 2009

У вас должно быть несколько ресурсов на XML-файл, но только в том случае, если ожидается, что все ресурсы будут объединены одновременно. Если вам нужно отправить кому-либо только несколько ресурсов, продолжайте создавать отдельный XML.

Даже в такой ситуации вы можете сохранить большой файл XML и генерировать по требованию файлы меньшего размера из исходного набора данных.

Использование базы данных, такой как SQLite3, позволит вам быстрее выполнять поиск и проще манипулировать данными, используя синтаксис SQL.

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