В настоящее время мы используем Simple.Data и адаптер MongoDb. Получив документ, мы добавляем его в POCO, например:
(User)db.Users.FindById(1234);
Начнем с того, что это работает довольно хорошо (черт возьми, никакой схемы!). Однако, если мы изменим структуру объекта User (например, добавим новое поле или изменим тип данных поля), то мы больше не сможем преобразовать исходный документ, поскольку он не соответствует нашей новой структуре класса.
Чтобы решить эту проблему, мы до сих пор пробовали два самых простых подхода:
- Обновление данных вручную для отражения изменений в структуре документа. На данный момент все в порядке, но не управляемо, когда проект развертывается в нескольких средах / запускается в производство.
- Ручное отображение; например. приведение SimpleRecord к словарю и оценка членов вручную. Я обеспокоен производительностью этого подхода, хотя еще не тестировал его. Меня также беспокоит, что я не нашел способа сделать его универсальным без использования отражения целевого типа для идентификации имен членов.
Мы также рассмотрели способы решения этой проблемы с помощью Ruby и Python. Первое привлекает больше (сохранение старых версий схемы в Ming кажется излишним).
Прежде чем я сбегу и портирую что-нибудь сумасшедшее, кто-нибудь решил эту проблему с помощью Simple.Data? Может ли кто-нибудь предложить какие-либо рекомендации относительно передовых методов работы с изменениями структуры документов в базах данных без схемы?
public List<Activity> Activities
или изменить тип,public int SomeValue
станетpublic string SomeValue
. На данный момент есть только два разработчика, так что мы хорошо справляемся с этим, но с большим количеством разработчиков и большим количеством сборок, похоже, это вызовет головную боль. Насколько я понимаю, это либо изменение старых данных, либо отображение таким образом, чтобы игнорировать изменения данных, но я не совсем понимаю, как сделать это относительно бесшовным / уменьшить боль в среде с быстрые изменения ... - person Morgan Bruce   schedule 18.09.2011