Какой способ хранения лучше выбрать для приложения-аналога Evernote?
Здравствуйте.
Необходимо выбрать способ хранения информации для приложения-аналога Evernote.
Т.е. будут текстовые заметки с вложениями (изображения, файлы), метаинформация (теги, папки и пр.).
Приложение будет кроссплатформенным. Структура данных должна быть так же кроссплатформенна, т.е. одинакова для клиентов Mac и Windows. Скорее всего будет использоваться electron или nw.js. Заметок может быть любое количество. Необходимо, чтобы это все работало быстро. В принципе, скорость работы Evernote устраивает. Вся информация, естественно, локальная. Как хранить заметки? Файловая система, SQL, noSQL, elasticsearch? Можно просто складывать каждую заметку в csv в папке, хранить в базе данных? Как хранить изображения, прикрепленные файлы?
Попробую кратко пояснить:
1. У любого документа есть структура (разметка).
2. У любой структуры есть типы данных (они же блоки).
3. У любого типа данных есть свой формат, назначение и объём.
Хранение:
1. Все "тяжёлые" типы данных (мультимедиа/приложения, архивы/документы) - храним в файловой структуре на диске.
2. Все "лёгкие" типы (разметка документа и текстовые данные: "тело" документа, заметки, рецензирование, глоссарий, сноски, переводы) - храним в базе данных.
Структура базы данных и сама база данных - зависит от задач и может быть любой (mysql - более, чем достаточно).
На данный момент не совсем понимаю, как все будет выглядеть, поэтому вопросы могут быть глупыми. NW.js и электроном пока не пользовался. Для mysql нужен сервер. В случае десктопного приложения как mysql будет работать с электроном или nw.js?
Я думал, что использование nw.js и electron это предполагает.
Оказывается, Evernote хранит изображения в sqlite БД. Что вы об этом думаете? Стоит ли повторять подобное?
Получается, что все как обычно? Создаю базу данных со структурой, описывающей все необходимые сущности. Основной в моем случае является заметка. И сохраняю все данные как и в вебе.
1) Как лучше включать изображения и файлы в текст заметки? Отдельная таблица для изображений и отдельная для файлов, в тексте заметки, например, специальный тег (буду использовать markdown) для изображения и файла, при открытии заметки изображение или файл будет рендериться так же, как и любой markdown тег и будут подгружаться мои изображения или файлы. Так?
2) В заметке будет два принципиально разных с точки зрения хранения типа файлов: вложение и текст. Насколько я понимаю, транзакции мне будут жизненно необходимы именно при обновлении содержимого заметки?
3) Не будет ли большой нагрузкой сохранение данных в БД при каждом малейшем изменении документа? С одной стороны - это есть необходимость. С другой стороны - не понимаю на данный момент специфики работы nwjs или электрона.