Xml или Sqlite, Когда отбросить Xml для Базы данных? [закрытый]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
50
задан Bill the Lizard 8 August 2012 в 16:25
поделиться

18 ответов

Я в основном соглашаюсь с Mitchel, что это может быть очень конкретно в зависимости от того, что является Вами собирающийся делать с XML/sqlite. Для Вашего случая (кэш) мне кажется, что использование sqlite (или другой встроенный dbs) имеет больше смысла.

Первый я действительно не думаю, что sqlite будет нужно больше служебное, чем XML. И я имею в виду и время разработки наверху и время выполнения наверху. Только проблема состоит в том, что у Вас есть зависимость от sqlite библиотеки. Но так как Вам была бы нужна некоторая библиотека для XML так или иначе, это не имеет значения (я предполагаю, что проект находится в C/C++).

Преимущества sqlite по xml:

  • все в одном файле,
  • потеря производительности ниже, чем XML, поскольку кэш становится больше,
  • можно разделить метаданные канала от самого кэша (другая таблица), но доступный таким же образом,
  • SQL, вероятно, легче работать с, чем XPath для большинства людей.

Недостатки sqlite:

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

Другие вещи на одном уровне для обоих решений, вероятно.

Для подведения его, отвечает на вопросы соответственно:

  1. Вы не будете знать, если Вы не протестируете свое определенное приложение с обоими бэкендами. Иначе это - всегда просто предположение. Основная поддержка обоих кэшей не должна быть проблемой кодировать. Тогда сравните и сравните.

  2. из-за пути XML-файлы организованы, sqlite поиски должно всегда быть быстрее (запрещающий некоторые угловые случаи, где он не имеет значения так или иначе, потому что это ослепительно быстро). Ускорение поисков в XML потребовало бы индексной базы данных так или иначе в Вашем случае, который будет означать иметь кэш для кэша, не особенно хорошую идею. Но с sqlite у Вас может быть индексация как часть базы данных.

21
ответ дан Community 7 November 2019 в 10:47
поделиться

Если Ваш поиск идет с дб. Вы могли разделить xml файлы на каталоги для упрощения поиска, но организаторские издержки легко становятся довольно тяжелыми. Вы также добираетесь намного больше, чем просто производительность с sql дб...

0
ответ дан 7 November 2019 в 10:47
поделиться

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

0
ответ дан Sebastian Redl 7 November 2019 в 10:47
поделиться

База данных является большой как часть Вашей программы. Если quering данные является частью Вашей бизнес-логики. XML является лучшим как формат файла, особенно если Вы формат данных:

1, Hierarchal
2, Вероятно, для изменения в будущем способами, которыми Вы не можете предположить
3 данные собираются жить дольше, чем программа

1
ответ дан Martin Beckett 7 November 2019 в 10:47
поделиться

Необходимо отметить, что у многих большой Реляционный DBS (Oracle и SQLServer) есть типы данных XML, чтобы хранить данные в базе данных и использовать XPath в SQL-операторе для получения доступа к тем данным.

кроме того, существуют собственные базы данных XML, которые работают очень как SQLite в смысле, они - один двоичный файл, содержащий набор документов (который мог примерно быть таблицей), тогда, Вы можете или XPath/XQuery на едином документе или целый набор. Таким образом с базой данных XML можно сделать, вещам нравится, хранят дневные данные как отдельный XML-документ в наборе..., таким образом, просто необходимо использовать тот один документ когда контакт с данными на сегодняшний день. Но запишите XQuery для выяснения исторических данных по набору документов для того человека. Пленка.

я использовал Беркли XMLDB (теперь поддержанный Oracle). Существуют другие, если Вы ищете Google "Собственную Базу данных XML". Я не видел проблемы производительности с хранением/получением данных этим способом.

XQuery является различным зверем (но определенно стоящий изучения), однако можно быть в состоянии просто использовать XPaths, который Вы в настоящее время используете с небольшими модификациями.

1
ответ дан 7 November 2019 в 10:47
поделиться

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

, Насколько издержки идут, SQLite компилирует во что-то как 250 К с нормальными флагами. Много XML парсинг библиотек больше, чем SQLite. Вы не получаете усилений параллелизма с помощью XML. Формат двоичного файла SQLite собирается поддерживать намного более эффективные записи (в основном, потому что Вы не можете добавить до конца хорошо отформатированного XML-файла). И даже чтение данных, большинство которых я принимаю, является довольно произвольным доступом, будет более быстрым использованием SQLite.

И в довершение ко всему прочь, Вы получаете доступ к преимуществам SQL как транзакции и индексы.

Редактирование: Забыл упоминать. Одно преимущество SQLite (в противоположность многим базам данных) - то, что он позволяет любой тип в любой строке в любом столбце. В основном с SQLite Вы получаете ту же свободу, которую Вы имеете с XML с точки зрения типов данных. Это также означает, что Вы не должны волноваться о помещении пределов на столбцы текста.

1
ответ дан Jay Stramel 7 November 2019 в 10:47
поделиться

XML может быть сохранен как текст и как формат двоичного файла.

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

Базы данных являются простым в использовании способом сохранить и поддержать данные. Они не самый быстрый способ хранить данные, которые являются форматом двоичного файла.

то, Что может ускорить вещи, использует в базе данных памяти / тип БД. Sqlite имеет эту опцию.

И это походит на лучший способ сделать это для Вас.

1
ответ дан 7 November 2019 в 10:47
поделиться

Я соглашаюсь с @Bradley.

XML является очень медленным и не особенно полезным как формат устройства хранения данных. Почему беспокойство? Вы будете редактировать данные рукой с помощью текстового редактора? Если так, XML все еще не является очень удобным форматом по сравнению с чем-то как YAML. С чем-то как SQlite запросы легче записать, и существует четко определенный API для того, чтобы вложить Ваши данные и.

XML прекрасен, если необходимо отправить данные вокруг между программами. Но от имени эффективности, необходимо, вероятно, произвести XML в передающее время и проанализировать его в "реальные данные" в, получают время.

Все вышеупомянутые средства, что Ваш вопрос о, "когда издержки базы данных выравниваются по ширине", довольно спорен. XML имеет путь выше наверху, все время, чем SQlite. (Настоящие базы данных как MSSQL более тяжелы, особенно в административных издержках, но это - полностью различный вопрос.)

1
ответ дан apenwarr 7 November 2019 в 10:47
поделиться

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

существует много других преимуществ от этого:

  • Добавляющие новые объекты действительно просты
  • Сортировка по нескольким столбцам
  • дубликаты Удаления с уникальным индексом

, я создал 2 представления, один для непрочитанных объектов и один для всех объектов, не уверенных, если это - лучшее использование представлений, но я действительно хотел попытаться использовать их.

я также сравнил xml по сравнению с sqlite использование класс StopWatch , и sqlite быстрее, , хотя могло просто случиться так, что моим способом проанализировать xml файлы не был самый быстрый метод .

  1. Небольшие # объекты и размер (25 объектов, 30 КБ)
    • xml
  2. sqlite
  3. ~8.0 мс на ~1.5 мс Большой # объектов (700 объектов, 350 КБ)
    • xml
  4. sqlite
  5. ~25 мс на ~20 мс Большой размер файла (850 объектов, 1024 КБ)
    • xml
sqlite ~60 мс на ~45 мс
2
ответ дан sieben 7 November 2019 в 10:47
поделиться

XML хорош для того, чтобы хранить данные, которые не полностью структурированы, и Вы обычно хотите обмениваться им с другим приложением. Я предпочитаю использовать базу данных SQL для данных. XML подвержен ошибкам, поскольку можно вызвать тонкие ошибки из-за опечаток или пропуска в самих данных. Некоторые платформы приложения с открытым исходным кодом используют слишком много xml файлов для конфигурации, данных, и т.д. Я предпочитаю иметь его в SQL.

, Так как Вы просите эмпирическое правило, я сказал бы, что использование, XML основывал данные приложения, конфигурацию, и т.д. если Вы собираетесь настроить его однажды и не получать доступ/искать к нему очень. Для активных поисков и updations, его лучшее для движения с SQL.

, Например, веб-сервер хранит данные приложения в XML-файле, и Вы не должны действительно выполнить сложный поиск, обновить файл. Веб-сервер запускается, читает xml файл, и это - это. Таким образом, XML прекрасен здесь. Предположим, что Вы используете платформу как Struts. Необходимо использовать XML, и конфигурации действия не изменяются очень, как только приложение разрабатывается и развертывается. Таким образом, снова XML-файл является хорошим путем. Теперь, если разработанное приложение Вашего Struts позволяет обширные поиски и updations, удаления, то SQL является оптимальным путем.

Offcourse, Вы, конечно, встретите одного или двух разработчиков в своей организации, которые будут петь XML или SQL только и объявлять XML или SQL как единственный способ пойти. Остерегайтесь таких людей и сделайте что 'чувства' прямо для Вашего приложения. Только следуйте за 'технологической религией'.

Думают о вещах как то, как часто необходимо обновить данные, как часто необходимо искать данные. Тогда у Вас будет свой ответ на том, что использовать - XML или SQL.

2
ответ дан 7 November 2019 в 10:47
поделиться

Если какое-либо время необходимо будет масштабироваться, базы данных использования.

2
ответ дан Mostlyharmless 7 November 2019 в 10:47
поделиться

Мне это действительно зависит от того, что Вы делаете с ними, сколько пользователей/процессов нужен доступ к ним одновременно и т.д.

, я работаю с большими XML-файлами все время, но они - единственный процесс, импортируют объекты стиля, которые многопользовательский, или производительность не являются действительно потребностями.

ПОЭТОМУ действительно это - баланс.

2
ответ дан Mitchel Sellers 7 November 2019 в 10:47
поделиться

Когда должен XML использоваться для персистентности данных вместо базы данных? Почти никогда. XML является транспортным языком данных. Это не спешит анализировать и неудобный запросить. Проанализируйте XML (не уничтожайте его!) и преобразовывают получающиеся данные в объекты области. Тогда сохраните объекты области. Главным преимуществом базы данных для персистентности является SQL, что означает неструктурированные запросы и доступ к общим инструментам и методам оптимизации.

4
ответ дан David Medinets 7 November 2019 в 10:47
поделиться

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

5
ответ дан Bradley Harris 7 November 2019 в 10:47
поделиться

Я не использовал бы XML для хранения объектов RSS. Программа чтения новостных лент делает постоянные обновления, поскольку она получает данные.

С XML, необходимо загрузить данные из файла сначала, проанализировать его, затем сохранить его для легкого поиска/извлечения/обновления. Походит на базу данных...

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

5
ответ дан typicalrunt 7 November 2019 в 10:47
поделиться
  1. Использование XML для данных, которые приложение должно знать - конфигурация, регистрируясь и что нет.
  2. базы данных Use (оракул, SQL-сервер и т.д.) для данных, что пользователь взаимодействует с прямо или косвенно - реальные данные
  3. Использование SQLite, если пользовательские данные являются большим количеством сериализированного набора - как огромный список файлов и их содержания или набора почтовых объектов и т.д., SQLite способен к этому.

Зависит от вида и размера данных.

6
ответ дан Vin 7 November 2019 в 10:47
поделиться

Не забывайте, что у Вас есть большая база данных под рукой: файловая система!

Партии программистов забывают, что / достойная файловая структура каталога:

  1. Это быстро как ад
  2. , Это портативно
  3. , Это имеет крошечное место

во время выполнения, Люди говорят о разделении XML-файлов в несколько XML-файлов... Я рассмотрел бы разделение Вашего XML в несколько каталогов и несколько файлов простого текста.

Дают ему движение. Это освежающе быстро.

13
ответ дан Oli 7 November 2019 в 10:47
поделиться

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

Для маленьких баз данных (несколько meg или меньший), XML был намного быстрее, и легче иметь дело с. Наши данные были естественно в древовидном формате, который сделал XML намного более привлекательный, и XPath позволил нам делать много запросов в одной простой строке вместо того, чтобы иметь необходимость спуститься с дерева родословной.

Мы программировали в среде Win32 и пользовались стандартной библиотекой Microsoft DOM. Мы загрузили бы все данные в память, проанализировали бы его в dom дерево и искали бы, добавить, изменить на в копии памяти. Мы периодически сохраняли бы данные и должны были повернуть копии в случае, если машина, разрушенная посреди записи.

Мы также должны были создать некоторые "индексы" рукой с помощью карт дерева C++. Это, конечно, было бы тривиально, чтобы сделать с sql.

Примечание, что размер данных по файловой системе был фактором 2-4 меньших, чем "в памяти" dom дерево.

К тому времени, когда данные добрались до размера 10M-100M, мы начали иметь настоящие проблемы. Интересно достаточно, во всех размерах данных, обработка XML была намного быстрее, чем sqlite оказался (потому что это было в памяти, не на жестком диске)! Проблема была на самом деле двукратной - сначала, loadup время действительно начал становиться длинным. Мы должны были бы ожидать приблизительно одна минута, прежде чем данные были в памяти, и карты были созданы. Конечно, когда-то загруженный программа была очень быстра. Вторая проблема состояла в том, что вся эта память была занята все время. Системы только с несколькими сотнями meg были бы безразличны в других приложениях даже при том, что мы работали очень быстро.

Мы на самом деле изучающий использование файловой системы базирующаяся xml база данных. Существует пара открытых полученных версий xml базы данных, мы судили их. Я никогда не пытался использовать коммерческую xml базу данных, таким образом, я не могу прокомментировать их. К сожалению, мы никогда не могли заставлять xml базы данных работать хорошо вообще. Даже действие заполнения базы данных с сотнями meg xml заняло часы.... Возможно, мы использовали его неправильно. Другая проблема состояла в том, что эти базы данных были довольно тяжелы. Они потребовали Java и имели всю клиент-серверную архитектуру. Мы разочаровались в этой идее.

Мы нашли sqlite тогда. Это решило наши проблемы, но по цене. Когда мы первоначально включили sqlite, память и проблемы времени загрузки закончились. К сожалению, так как вся обработка была теперь сделана на жестком диске, загрузка фоновой обработки пошла путем. В то время как ранее мы даже не заметили загрузку ЦП, теперь использование процессора было путем. Мы должны были оптимизировать код, и все еще должны были сохранить некоторые данные в памяти. Мы также должны были переписать много простых запросов XPath как сложные алгоритмы мультизапроса.

, Таким образом, вот сводка того, что мы изучили.

  1. Для древовидных данных, XML намного легче запросить и изменить использование XPath.

  2. Для небольших наборов данных (меньше, чем 10M), XML сдул sqlite в производительности.

  3. Для больших наборов данных (больше, чем 10M-100M), время загрузки XML и использование памяти стали большой проблемой, до такой степени, что некоторые компьютеры становятся неприменимыми.

  4. Мы не могли заставить открытый исходный код xml база данных решать проблемы, связанные с большими наборами данных.

  5. SQLITE не имеет проблем памяти XML dom, но это обычно медленнее в обработке данных (это находится на жестком диске, не в памяти). (отметьте - sqlite, таблицы могут быть сохранены в памяти, возможно, это сделало бы ее как быстро.... Мы не попробовали это, потому что мы хотели вытащить данные из памяти.)

  6. Хранение и запросы древовидных данных в таблице не приятны. Однако руководящие транзакции и индексирующий частично восполняют его.

38
ответ дан 7 November 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: