Pull to refresh

Comments 32

Мне кажется, что многие ваши проблемы намного легче можно решить используя НЕреляционные ДБ, а само приложение строить на основе OSGI.
Если вам так кажется, то может выскажите конкретные предположения о возможной реализации и расскажете о производительности подобного решения?
А что вас конкретно интересует?
Меня конкретно интересует как вы собираетесь размещать универсальные изменяемые структуры по верх NoSQL БД? При помощи сериализации?
Ну например тут — не реляционный подход (фактически база ключ-значение с построением дополнительных индексов) поверх реляционной БД
habrahabr.ru/blogs/mysql/87147/

Ну и традиционно: MongoDB, например

«Поверх» любой реляционной DB — это дополнительные проблемы с производительностью.
MongoDB документ-орентированая база это далеко не для всего будет хорошо.
OSGI не решит проблему динамического изменения структуры данных без изменения кода. Это что-то напоминающее самый первый подход.

Можно ещё покопать в сторону EMF, но я не в курсе, как там с интеграцией с базой данных. По той информации, что есть у меня, производительность DB->EMF оставляет желать лучшего.

Нереляционные ДБ это отдельная история, их используют либо в небольших, либо в очень больших приложениях. И в enterpise их не используют по той причине, что народ просто не шарит, как с ними работать.
Ну так это проблемы этого народа, нет?
Нет.

Когда вы пишите приложения для себя — используйте что хотите.

Но когда вы пишете в компании, то ваш API (в том числе, например, возможность использования SQL) будет использоваться другими людьми. Поэтому база данных с поддержкой SQL лучше, так как намного больше людей знает SQL.
Намного больше людей знают PHP, чем Java. Давайте теперь не будем писать на Жаве?

Возможно, я просто рассуждаю с позиции lead'a в небольшой фирме, который и сам сотрудников нанимает, и сам технологии определяет.
Если бы стоимость разработки и поддержки решений на PHP была бы дешевле, чем на Java — использовали бы PHP. Рынок определяет.

Речь идёт, разумеется, про приложения уровня Enterprise, с большой разветвлённой структурой классов, где нужно взаимодействие RDBMS-AS-App-Client / External App. Разумеется, всё тоже можно сделать и на PHP, но стоить это будет дороже.

Сколько программистов могут написать MDB на Java? А его аналог на PHP? Теперь EJB с поддержкой XA транзакций (встроено в J2EE) и его аналог на PHP?
Сейчас набежит толпа злобных PHP'шников и заминусует вам карму, готовьтесь:)

«Рынок определяет» — это когда вам заказчик прямым текстом говорит: «хочу такую-то программу на *таком-то* языке». А так определяют самые крикливые и(или) авторитетные разработчики у исполнителя.

Безусловно, я очень сильно утрирую и упрощаю.

ЗЫ: Я добавил коммент ниже. Посмотрите его тоже, пожалуйста.

ЗЗЫ: На всякий случай: мне интересно это обсуждение, и интересно ваше мнение как человека с другим взглядом. Возможно, мои комменты несколько остры, но таков уж я…
«Рынок определяет» — это ещё когда вы смотрите на прейскурант на специалистов и считаете:

— написать сайт на PHP — 1000 у.е.
— написать сайт на Java — 5000 у.е.

— написать приложение управления предприятием на Java — 10000 у.е.
— написать приложение управления предприятием на PHP — 50000 у.е.

тоже утрирую :)
Напишу чуть подробнее. На данный момент явно прослеживается тенденция ухода от реляционных баз. Оснований для этого очень много. Те, кто не хочет развиваться и учиться чему-то новому, останутся за бортом. Да, не быстро, но это произойдет рано или поздно.

Рассчитывать на подобных сотрудников может быть оправдано в финансовом плане, но, во-первых, это — насилие над собой (имхо), а, во-вторых, под вопросом остаются долгосрочные перспективы.

Поэтому если в процессе проектирования становится понятно, что схема базы будет часто меняться, то имеет смысл отказаться от привычного, к примеру, MySQL'a.

 

На самом деле меня задел ваш аргумент в стиле «миллион леммингов использует ...». Это можно назвать аргументом только после детального анализа ранка труда, плюсов и минусов разных решений, бюджета проекта, предположительных темпов развития и т.п… И это в любом это будет уникально для каждой отдельно взятой фирмы.
К сожалению, в последние три года я занимался только коммерческой разработкой, которая довольно консервативна. Уход от реляционных баз данных для меня выражается лишь в рекламе сервисов от Amazon/Google (в том числе внутренних вроде bigtable). В остальном — и обучение будущих сотрудников, и предложения на рынке труда — пока что знание SQL является обязательным, а строчки о нереляционных СУБД мало где увидишь.

Что касается «отказаться от», мне кажется, пока что нет достойных конкурентов реляционным базам данных, которые уже сейчас бы поддерживались на уровне платформ — .NET/J2EE. Под поддержкой я понимаю не просто возможность работать с СУБД, а поддержка самой идеологии в стандартах и шаблонах проектирования. Более того, я вижу некоторые теоретические ограничения в производительности, по которым РСУБД всегда будет обгонять СУБД вроде распределённых хеш-таблиц (например, поиск по определённым индексам).

«в любом это будет уникально» — это уникально для отдельной фирмы, но не для отрасли в целом. Пока что Enterprise — это либо .NET / Axapta, либо Java / SAP, либо 1С / Парус / etc, но PHP — единицы.

books.google.ru/books?id=FyWZt5DdvFkC — Java + .NET, PHP — лишь для уровня отображения

Ах да. Вообще-то самый популярный язык для Enterprise пока что был и остаётся… Cobol
имеется схожая с идеалом автора логика работы:

на данный момент имеется следующая реализация:

описание типов — хранится в БД, т.е. какие типы
хабр съел мое предложение не дождавшись окончания его написания, еще раз:

имеется схожая с идеалом автора логика работы:
описание типов — хранится в БД, исходя из описания формируются Java классы, далее эти классы уходят в Hibernate, который в свою очередь создает соответствующие классам таблицы. При изменении полей типа, автоматически на лету пересоздаются классы и перегружается SessionFactoryBean, что приводит к нужным изменениям в БД.
имеется в основе этого сервиса, и конкретно в основе этого метода.
обратите внимание что есть возможность использовать комплексные типы, т.е. ссылки на уже ранее определенные типы
возможно в будущем ;)
кстати а зачем XML Schema, можно ведь обойтись Annotations
Annotations — они внутри кода. А нужно средство описания структуры данных, которое можно исменять в runtime.

XML Schema тут ещё не только как физический способ хранения, но и как отправная точка. Например, в XML Schema нет элементарного типа «enum» — это предикат более простого типа string/int. Аналогично, в XML Schema множественность значения (multiple) — также предикат. Наличие подобной проработанной модели мета-данных сильно помогает.
описание структуры данных проще хранить в БД в специальных описательных таблицах, а из них в runtime режиме уже генерить код с анотациями
А формат этих таблиц? :)

Вот задашься неправильной структурой (вроде multiple как отдельный тип) и будешь мучаться лет 15…
так а что спасет если также задаться неправильной структурой в XML?
в добавок определение типов проходит через специальные методы, не руками, все автоматизировать, тогда вероятность ошибки стремится к 0.
Я немножко о другом. О формате мета-таблиц. Какие типы атрибутов запланировать, как сделать флаги read only / fixed / multiple / etc.

В формате XML Schema это уже хорошо расписано. Что, например, multiple является предикатом, default value — мета-аттрибутом аттрибута, а enum — это подтип другого типа.

А в одной известной мне системе enum является отдельным типом, но не наследуемым, в результате — некоторые проблемы со структурой данных, отсутствие некоторых unique ключей и т.д. В другой системе multiple является отдельным типом и только строковым — тоже не самое хорошее ограничение.
А мы кстати используем что то подобное. Но метаданные как известно есть и в самой БД. Но мы не используем типизированный подход. С одной стороны айс, вообще не надо писать новый код для новой таблицы, никакой генерации и т.д. С другой стороны хреново что подход не типизированный, все таки добавляются определенные сложности разработки… Модель классов отвечающих за работу с БД похожа на модель ADO.Net, но со своими рюшечками.
Очень интересно будет посмотреть на то, что у вас получилось. А я может покажу что получилось у нас. :-)
Я знаком с реализацией подобного подхода.

Но под форматом я понимаю несколько другое.
Sign up to leave a comment.

Articles

Change theme settings