2014-09-08 3 views
1

Я начинаю создавать новое приложение для управления документами на основе Spring, и я хотел бы отправиться в мир NoSQL/MongoDB. Исходя из РСУБД фона, у меня есть несколько проблем с MongoDB, в первую очередь:Проблемы с NoSQL/MongoDB

  1. Отсутствие сделок
  2. Более сфокусированный на производительность/масштабируемость, чем целостность данных
  3. Отсутствие JPA стандартного

Для начала я не ожидаю высоких нагрузок или массивных чтений против записи. Я подозреваю, что чтение пишет будет от 10 до 1. Кроме того, я не ожидаю очень высоких нагрузок - особенно для начала.

1) Из того, что я могу сказать, нет простого способа делать транзакции с несколькими сборами. Если в СУБД я могу легко получить счетчик идентификаторов документов для каждого пользователя, который хранится в отдельной таблице, похоже, что это невозможно сделать в MongoDB, поскольку он будет находиться в отдельной коллекции/документе. Следовательно, я не уверен, разрешила ли эта проблема.

2) Кроме того, из того, что я прочитал, NoSQL отличен, где целостность данных не является основной задачей (например, комментарии в блоге и т. Д.). Однако я не уверен, как это переводится как первичное хранилище данных для приложения. Означает ли это, что можно обновить документ и не получиться? Я столкнулся с older unaccredited rant, в котором обсуждаются неудачные коммиты/etc, которые еще больше отражают проблемы.

3) По-видимому, отсутствие стандарта JPA для NoSQL подразумевает, что я должен выбрать свою БД и придерживаться ее. В отличие от JPA, где я могу легко обменять одного поставщика БД на другого поставщика, совместимого с протоколом JPQ/SQL, я должен скомпоновать с MongoDB и перепроектировать мою структуру/запросы, если когда-либо захочу переключиться на другую базу данных NoSQL. Я видел Hibernate OGM, но, похоже, он все еще очень в зачаточном состоянии и лишь обеспечивает рудиментарную поддержку. Определенно не то, что могло бы избежать особых запросов mongodb.

Эти проблемы легко смягчаются? Будучи новичком в мире NoSQL, мне все еще трудно понять правильное деловое дело, когда использовать NoSQL.

+1

За счет защиты от дьявола, зачем использовать NoSQL? Разве вы не должны выбирать инструмент для своих потребностей, а не выбирать инструмент, а затем задаетесь вопросом: «Как я могу использовать это, чтобы прибить этот гвоздь?» (если, конечно, вы не изучаете технику). Если ваши данные имеют больший смысл в отношениях, имеет фиксированную схему, не большой объем и не имеет никаких проблем с ограничениями ACID, зачем искать что-то еще? – prabugp

+0

@prabugp Для начала, я пытаюсь научиться технике. :) Во-вторых, не полностью зная технологию, мне сложно знать, имеет ли смысл в этом случае NoSQL db. Есть много случаев, когда я вижу схему, упрощающую дизайн. Тем не менее, эти проблемы с транзакциями/ACID заставляют меня задаться вопросом, насколько по-настоящему эффективны мои потребности. Я подозреваю, что другие уже столкнулись с этими проблемами, поэтому я ищу обратную связь, если я неправильно понимаю ограничения NoSQL/MongoDB, или если существуют решения, или если это то, что мне нужно для жизни. –

+1

DataNucleus JPA поддерживает MongoDB с давних времен, но затем JPA явно разрабатывается для РСУБД, поэтому JPQL не «подходит» для других типов хранилищ данных, JDO и JDOQL OTOH. –

ответ

0

Это хорошие вопросы. Вот мои 2 цента о MongoDB и некоторые ссылки, которые помогут вам узнать больше. Я не буду говорить ни о каких других новинках NoSQL, поскольку там много чего, и нет никакого единого принципа NoSQL, кроме «он не использует SQL», за исключением того, что иногда люди делают его работу с SQL, так что да.

  1. MongoDB не делает соединения. Период. MongoDB не имеет транзакций - будь то в одной коллекции или с несколькими коллекциями. Единицей атомарности является документ. Как это работает в приложении? Через schema design и некоторые методы для восстановления частей семантики ACID, если необходимо, например, используя two-phase commits. В реляционных базах данных дизайн схемы прост и основан на структуре данных, а не на его использовании. Соединения и транзакции заполняют пробел между абстрактным, нормализованным представлением данных и конкретными способами использования данных. Моделирование интро данных уже связан объясняет ситуацию для MongoDB, для контраста:

    Основной задача при моделировании данных балансирует потребность применения, ТОГО двигатель базы данных и шаблоны поиска данных. При проектировании моделей данных всегда учитывайте использование приложений данными (т. Е. Запросы, обновления и обработку данных), а также внутреннюю структуру самих данных.

  2. Этот конкретный «пронзительный», очевидно, очень старый, поскольку он говорит о том, что записи по умолчанию не подтверждены. This isn't the case anymore. Учитывая, что любая распределенная компьютерная система работает через сеть, довольно легко придумать, как вести себя плохо. Блог MongoDB охватывал много всего этого в series on consistency. Я предлагаю вам ознакомиться с документами о журналировании, репликации и заботе о напитках и посмотреть, улучшит ли это состояние MongoDB как основного хранилища данных.

  3. Yup. Это связано с территорией NoSQL. То, что не существует, - это общие языки доступа к данным или стандарты, потому что все новое и пытается быть другим. Вернитесь через 30 лет.

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