Эффективная переносимая база данных для иерархического набора данных - Json, Sqlite или? - PullRequest
1 голос
/ 06 января 2011

Мне нужно сделать файл, который содержит иерархический набор данных.Данный набор данных представляет собой список файловой системы (имена каталогов, имена / размеры файлов в каждом каталоге, подкаталоги, ...).

Моим первым инстинктом было использование Json и выравнивание иерархии с использованием путейтак что парсер не должен повторять так много.Как видно из приведенного ниже примера, каждая запись представляет собой путь ("/", "/ child01", "/ child01 / gchild01", ...) и его файлы.

{
    "entries":
    [
        {
            "path":"/",
            "files":
            [
                {"name":"File1", "size":1024},
                {"name":"File2", "size":1024}
            ]
        },
        {
            "path":"/child01",
            "files":
            [
                {"name":"File1", "size":1024},
                {"name":"File2", "size":1024}
            ]
        },
        {
            "path":"/child01/gchild01",
            "files":
            [
                {"name":"File1", "size":1024},
                {"name":"File2", "size":1024}
            ]
        },
        {
            "path":"/child02",
            "files":
            [
                {"name":"File1", "size":1024},
                {"name":"File2", "size":1024}
            ]
        }
    ]
}

Тогда я подумал, чтоповторяя ключи снова и снова («имя», «размер») для каждого типа файлов отстой.Так что я нашел эту статью о том, как использовать Json, как если бы это была база данных - http://peter.michaux.ca/articles/json-db-a-compressed-json-format

Используя эту технику, у меня была бы таблица Json, такая как "Entry" со столбцами "Id", "ParentId",«EntryType», «Name», «FileSize», где «EntryType» будет 0 для каталога и 1 для файла.

Итак, на данный момент, мне интересно, будет ли sqlite лучшим выбором.Я думаю, что размер файла будет намного меньше, чем файл Json, но он может быть незначительным, если я использую сжатый формат Json-DB из статьи.Есть ли у вас какие-либо другие преимущества, кроме размера?

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Я думаю, что объект Javascript для источника данных, загруженный в виде потока файлов в браузер и затем используемый в логике javascript в браузере, будет занимать наименьшее время и иметь хорошую производительность. НО только до ограниченного размера иерархии содержимого.

Кроме того, сохранение иерархии в другом месте и сохранение ее только в виде файла JSON сильно ограничивает использование вашего источника данных в вашем проекте технологиями на стороне клиента ... или форсирует преобразования в другие технологии.

Если вы создаете чистое приложение на основе javascript (html, js, приложение только для css), то вы можете оставить его как один объект JSON ... и ограничить размеры иерархии ... вы можете разделить большие иерархии на несколькофайлы, связывающие объекты json.

Если в вашем проекте будет серверный код, такой как php, учитывая управляемость кода и масштабирование, в идеале следует хранить данные в БД SQLite, во время выполнения создавайте иерархии jsonдля ограниченных уровней при загрузке ajax с вашей страницы.

1 голос
/ 06 января 2011

Если это единственные данные, которые хранит ваше приложение, то вы можете сделать что-то действительно простое, например просто сохранить данные в текстовом файле, который легко разбирать / читать, например:

File1:1024
File2:1024
child01
    File1:1024
    File2:1024
    gchild01
        File1:1024
        File2:1024
child02
    File1:1024
    File2:1024

Файлы получают Файл: Размери каталоги получают только свое имя.Отступ дает структуру.Для чего-то немного более стандартного, но столь же простого для чтения, используйте yaml.

http://www.yaml.org/

Оба могут выиграть от уменьшения размера файла (но уменьшения читабельности для пользователя), сжав файл.*

А если у вас есть больше данных для хранения, тогда используйте SQLite.SQLite великолепен.

Не используйте JSON для сохранения данных.Это расточительно.

...