2008-09-26 2 views
0

Я созерцаю приложение, которое, с первого взгляда, представляет собой базу данных «свободной формы». Коллекция заметок и артефактов. Однако в то же время в системе существуют структуры более высокого уровня.Должен ли я публиковать формат файла или API?

Мой 10-секундный дизайн задней части салфеток предусматривает хранение отдельных «записей» в небольших файлах (возможно, XML), организованных в каталогах, а затем индексацию всего набора с использованием чего-то вроде Lucene.

Предпосылкой для этого является то, что людям будет «стыкуться» с системой, поскольку они должны просто «помещать файлы в нужные места». А поскольку они простые текстовые файлы, они могут быть сгенерированы любой программой (например, языки сценариев) и, при необходимости, даже текстовым редактором.

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

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

Или я могу потребовать, чтобы какой-то специальный файл обновлялся «новыми файлами» или что-то вроде того, что система может проверить при запуске.

Альтернативой является использование другого формата, а не отдельного файла. Используйте какую-то базу данных, они десяток десятков. Но, сделав это, внезапно эти данные эффективно «непрозрачны» случайному пользователю. Это делает скрипты и такие потенциально более трудными.

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

Если я пишу его на Java, я мог бы опубликовать Java API, который мог бы использовать инструмент, но только если он тоже был написан на Java.

Или я мог бы представить API как, скажем, легкие веб-службы (POX через HTTP или REST через HTTP). Поддержка HTTP сегодня широко распространена. Это потребует запуска приложения для использования любой утилиты.

Как и все, это баланс. Я думаю, что решение File проще, потенциально менее эффективно, но, возможно, ограничивает внутреннюю сложность.

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

Как вы думаете, что вы можете подходить к этой проблеме?

ответ

2

Я бы пошел с файловым форматом (и как-то отменил ваш код доступа как ссылочную имплантацию, чтобы люди могли делать ввод-вывод)

0

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

1

KISS

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

0

Определенно встроенная база данных в качестве первичного хранилища данных. Это избавит вас от многих головных болей, сохраняя структуру папок так, как вы планировали. Поиск, индексирование также будет намного быстрее. Пользователь может выполнить миграцию или резервное копирование своих данных, скопировав один файл. Вы используете полнотекстовый поиск и множество SQL-запросов и функций.

У вас есть опции «Экспорт». Экспорт в файловую систему позволит построить эту иерархию XML, описанную ранее. Вы также можете легко экспортировать в один файл, XML, CSV и т. Д. Импорт из этого экспорта также может быть вариантом.

И, наконец, если вы полностью изолируете доступ к БД внутренне, вы можете открыть этот API для пользователя, как ваш пример API.

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

Смежные вопросы