Я пытаюсь разработать решение для управления данными для коммерческого продукта, отвечающего нескольким критериям. Критерии и мои рассуждения таковы:
- Решение должно быть в С# или поддержке С#
- Управление данными как JSON
- Обслуживание внешних схем
- Возможность кэшировать некоторые или все данные в памяти и сохраняться на диске
- Не требуется дополнительная установка
- Если решение включает стороннее программное обеспечение, лицензия должна поддерживать бесплатное коммерческое использование
Требование № 1. Мое приложение написано на С#, и я бы предпочел, чтобы любое решение не включало интеграцию с приложениями, библиотеками или кодом на другом языке.
Требование № 2. Существует несколько инструментов и библиотек, основанных на JSON, которые я бы хотел использовать, поэтому мне нужно решение, в котором данные либо легко конвертируются в/из JSON, либо легко конвертируются.
Требование № 3. Я хочу избежать обслуживания схемы, которое поставляется с использованием реляционных баз данных. Я предпочитаю управлять несогласованными сопоставлениями данных в объекте в коде и обновлять старые данные кода вместо управления отдельными обновлениями схемы.
Требование № 4. Мне нужно, чтобы некоторые или все данные загружались в память в любое время и все данные сохранялись на диске. Сохраняются ли данные в памяти или нет, они должны быть необязательными для каждого типа данных.
Требование № 5. При установке моего продукта я не хочу иметь никаких дополнительных установок или других внешних служб, кроме моего приложения. Лучше всего использовать самодостаточное решение.
Требование № 6. Предполагаемое использование предназначено для распределенного коммерческого продукта. Я бы предпочел избежать каких-либо дополнительных сборов или проблем с лицензированием, которые поставляются со многими сторонними решениями.
На сегодняшний день я попробовал несколько решений. Первоначально у меня не было столько ограничений, и я пошел с SQLite.NET, и его использование не было неприятным, но накладные расходы от обслуживания схемы и формата данных были больше, чем я хотел бы. Я исследовал множество решений NoSQL (например, RavenDB), другие сторонние решения (Karvonite) и простые реализации хранилища файлов JSON, но я не удовлетворены любым из них.
Есть ли специальный подход или решение, которые мне не хватает, что кто-то еще успешно использовал? Я надеюсь, что просто пропущу опции, которые мне нужны, и что некоторые эксперты NoSQL и .NET имеют достаточный опыт в этой области, чтобы указать мне в правильном направлении.
EDIT. Если какие-либо исходные комментаторы запутались, я обновил вопрос и заголовок, чтобы лучше придерживаться политик SO.