Я начинаю создавать новое приложение для управления документами на основе Spring, и я хотел бы отправиться в мир NoSQL/MongoDB. Исходя из РСУБД фона, у меня есть несколько проблем с MongoDB, в первую очередь:Проблемы с NoSQL/MongoDB
- Отсутствие сделок
- Более сфокусированный на производительность/масштабируемость, чем целостность данных
- Отсутствие JPA стандартного
Для начала я не ожидаю высоких нагрузок или массивных чтений против записи. Я подозреваю, что чтение пишет будет от 10 до 1. Кроме того, я не ожидаю очень высоких нагрузок - особенно для начала.
1) Из того, что я могу сказать, нет простого способа делать транзакции с несколькими сборами. Если в СУБД я могу легко получить счетчик идентификаторов документов для каждого пользователя, который хранится в отдельной таблице, похоже, что это невозможно сделать в MongoDB, поскольку он будет находиться в отдельной коллекции/документе. Следовательно, я не уверен, разрешила ли эта проблема.
2) Кроме того, из того, что я прочитал, NoSQL отличен, где целостность данных не является основной задачей (например, комментарии в блоге и т. Д.). Однако я не уверен, как это переводится как первичное хранилище данных для приложения. Означает ли это, что можно обновить документ и не получиться? Я столкнулся с older unaccredited rant, в котором обсуждаются неудачные коммиты/etc, которые еще больше отражают проблемы.
3) По-видимому, отсутствие стандарта JPA для NoSQL подразумевает, что я должен выбрать свою БД и придерживаться ее. В отличие от JPA, где я могу легко обменять одного поставщика БД на другого поставщика, совместимого с протоколом JPQ/SQL, я должен скомпоновать с MongoDB и перепроектировать мою структуру/запросы, если когда-либо захочу переключиться на другую базу данных NoSQL. Я видел Hibernate OGM, но, похоже, он все еще очень в зачаточном состоянии и лишь обеспечивает рудиментарную поддержку. Определенно не то, что могло бы избежать особых запросов mongodb.
Эти проблемы легко смягчаются? Будучи новичком в мире NoSQL, мне все еще трудно понять правильное деловое дело, когда использовать NoSQL.
За счет защиты от дьявола, зачем использовать NoSQL? Разве вы не должны выбирать инструмент для своих потребностей, а не выбирать инструмент, а затем задаетесь вопросом: «Как я могу использовать это, чтобы прибить этот гвоздь?» (если, конечно, вы не изучаете технику). Если ваши данные имеют больший смысл в отношениях, имеет фиксированную схему, не большой объем и не имеет никаких проблем с ограничениями ACID, зачем искать что-то еще? – prabugp
@prabugp Для начала, я пытаюсь научиться технике. :) Во-вторых, не полностью зная технологию, мне сложно знать, имеет ли смысл в этом случае NoSQL db. Есть много случаев, когда я вижу схему, упрощающую дизайн. Тем не менее, эти проблемы с транзакциями/ACID заставляют меня задаться вопросом, насколько по-настоящему эффективны мои потребности. Я подозреваю, что другие уже столкнулись с этими проблемами, поэтому я ищу обратную связь, если я неправильно понимаю ограничения NoSQL/MongoDB, или если существуют решения, или если это то, что мне нужно для жизни. –
DataNucleus JPA поддерживает MongoDB с давних времен, но затем JPA явно разрабатывается для РСУБД, поэтому JPQL не «подходит» для других типов хранилищ данных, JDO и JDOQL OTOH. –