2013-04-03 5 views
1

Мне нужен совет.Дизайн базы данных: Mysql или MongoDb/OrientDb для сопоставления отношений?

Я разрабатываю веб-приложение, написанное на PHP с несколькими объектами, но много (по количеству и типу) отношения.

Простые примеры:

  • Entities: 4
  • Возможные ManyToMany отношения и OneToMany и OneToOne: дюжин

Сегодня, это имеет смысл продолжать использовать для отображения отношений RDMS как MySql или лучше использовать графическую базу данных, такую ​​как OrientdDb, или документ-ориентированный db, такой как MongoDb?

Я думаю, что лучше работать с сущностями в mysql и отношениями между объектами в OrientDb или MongoDb. Во время вставки объекта я могу реплицировать некоторые свои данные для управления отношениями, избегая десятков объединений между таблицами, избегая огромных индексов и с более быстрой вставкой/обновлением в Mysql.

Я делаю неправильно?

+0

Возможно, было бы лучше предоставить дополнительную информацию о том, что вам нужно десятки объединений, когда у вас есть только несколько сущностей (сколько всего?) В любом случае, что касается объединений и монго, обычно мой разум идет к встроенная информация под документом – Melsi

+0

с «Entity» Я имею в виду некоторых городов, пользователей, событий, местоположений .... с отношениями всех возможных отношений между этими объектами ... (пользователь может перейти в N городов, пользователь может жить в один город, пользователь может пойти на мероприятие, пользователь пошел на большее количество событий, пользователь вроде ...) ok Я немного «общий», но я думаю, вы понимаете, что я имею в виду? – vincenzodb

+0

Хорошо, я вижу, знаю, что такое сущность, дизайн ER и т. Д. Мне просто любопытно, о «десятках объединений» .. вам обычно не требуется объединять более 2-3 или 4 таблицы (обычно). В любом случае, я бы посоветовал вам немного изучить слабости и сильные стороны каждой системы, чтобы вы могли видеть, как они могут применяться к вашему проекту.Лично я использовал mysql в прошлом, и теперь я влюблен в Монго, поэтому мое мнение не может быть объективным. Тем не менее, я по-прежнему настаиваю, что вы изучаете себя как основы каждого сервера, тем более, что управление объединяется (что вас больше всего интересует) – Melsi

ответ

2

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

Более подробное описание вашего домена может помочь дать вам хороший совет. В любом случае я мог бы сформулировать эти две вещи:

  1. Не используйте манго для отношений! Если есть вещь, которую Mongo НЕ предназначен для управления, это отношения.
  2. Если вы планируете использовать Orient для управления отношениями графа, и вам также не нужно много нормальных отношений (нормальный характер, я имею в виду), не беспокойтесь, используя MySQL и Orient: идите только на Orient.

И, конечно, иметь в виду, что MySQL не представляет никакой опасности для хостинга, Монго является получение некоторый импульс (ObjectRocket и ServerGrove оба обеспечивают облако Монго услуг из коробки, но вы будете иметь жесткий время нахождения монго на «дешевом» общедоступном хостинге), в то время как для Orient я думаю, вам придется отправиться в выделенный серверный/облачный экземпляр и настроить службу самостоятельно.

+0

Tnx @StickGrinder, Я рассмотрел число отношений, потому что отношение = объединение и много подключений дороже ... Я не могу ввести более подробно, но при моем обычном перечислении данных я могу иметь дюжину отношений для каждого элемента. Я бы хотел использовать лучшие технологии для управления отношениями, которые являются сердцем моего приложения (особенно для сортировки данных) с минимально возможной нагрузкой и возможностью оптимизировать рост приложения самым простым способом. Я просил эти вещи, потому что я не знаю почти ничего mongodb и ориентироваться :) – vincenzodb

+0

OrientDB хостинг предлагается NuvolaBase.com или подумайте о том, чтобы установить собственный сервер повсюду в Облаке (это Java) – Lvca

0

Ваш вопрос неопределенный, однако, я считаю, что могу предоставить некоторые указатели, которые могут помочь.

Во-первых, противоречит @StickGrinder:

Не используйте Монго для отношений! Если есть вещь, которую Mongo НЕ предназначен для управления, это отношения.

MongoDB может обрабатывать отношения прекрасно это все о , как вы видите отношения как управляются.

Фактически MongoDB может обрабатывать отношения, а также СУБД в некоторых сценариях, конечно же, правила РСУБД над MongoDB для ссылочной целостности на стороне сервера, но тогда это то, что вам нужно будет судить; что действительно означает для вас что-то.

Что касается хостинговых решений, то MySQL на самом деле не так уж и очень понравился, правда, что SQL имеет более легко предоставленные экземпляры, однако MySQL по-прежнему является технологией, которую вы можете получить только в основных формах большую часть времени и доверять мне, Не хотите размещать данные об этих услугах. Недавно AWS запустил полностью масштабируемый экземпляр MySQL, чтобы можно было что-то изучить.

У MongoDB есть много провайдеров от MongoLabs до ObjectRocket, и многие веб-хостинг-провайдеры (такие как AWS и Heroku) обеспечивают легкий доступ к пакетам MongoDB. На AWS вы можете получить полные облачные шаблоны, которые предварительно настроят дешевый (по сравнению с тем, сколько он должен стоить хозяину) кластера для черепов реплик.

Так что хостинг на самом деле не проблема, если вам это нужно, вы можете быстро добраться до него.

Сегодня, это имеет смысл продолжать использовать для отображения отношений RDMS как MySql или лучше использовать базу данных графа как OrientdDb, или документ-ориентированной БД как MongoDb?

Это заявление и отсутствие наблюдения далее приводят меня к тому, что я считаю, что на ваш вопрос не хватает исследований.

Графическая база данных очень эффективна при сопоставлении определенного типа отношений, а точнее - социальных отношений между отдельными людьми в сети, тогда как СУБД, например MySQL, хороша при отображении всех отношений, но не является лучшим.

Я думаю, что лучше работать с объектами в MySQL и отношений между субъектами в OrientDb или MongoDb

Почему отдельные санитаров? Просто пойдите для MySQL, если это то, что вам нравится. MySQL будет более чем соответствовать вашим потребностям.

Во время ввода объекта я могу реплицировать некоторые данные для управления отношениями, избегая десятков объединений между таблицами, избегая огромных индексов и с более быстрой вставкой/обновлением в Mysql.

Разделение ваших технологий даст вам то, что известно как «операционный шарик». Это может прийти в форме поддержания согласованности между системами, что вам нужно будет управлять.

Если вам требуется быстрый доступ к объектам для отображения или что-то еще, то просто храните их в memcached или что-то еще, если вам действительно нужно, я думаю, что вы смотрите на это неправильно, разбивая ваши технологии.

Это несколько указателей.

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