CouchDB лучше всего подходит для динамических языков? - PullRequest
7 голосов
/ 01 апреля 2009

Я знаком с CouchDB , и сразу пришла идея отобразить его результаты на объекты Scala, а также найти какой-то естественный способ взаимодействия с ним.

Но я вижу, что динамические языки, такие как Ruby и Javascript, очень хорошо работают с подходом json / document-centric / shchema без CouchDB.

Есть ли хороший подход к работе с Couch на статических языках?

Ответы [ 2 ]

17 голосов
/ 01 апреля 2009

Я понимаю, что CouchDB работает исключительно с объектами JSON. Поскольку JSON нетипизирован, заманчиво полагать, что он более естественно подходит для динамических языков. Однако XML, как правило, тоже нетипизирован, и Scala имеет очень хорошую поддержку библиотек для создания и манипулирования XML. Для ознакомления с возможностями XML Scala, см .: http://www.ibm.com/developerworks/library/x-scalaxml/

Аналогично с JSON. При правильной поддержке библиотеки работа с JSON может быть естественной даже в статических языках. Один подход к работе с данными JSON в Scala см. В этой статье: http://technically.us/code/x/weaving-tweed-with-scala-and-json/

В общем случае с объектными базами данных иногда удобно определить «модель» (используя, например, класс на языке) и использовать JSON или XML или какой-либо другой нетипизированный язык документа в качестве сериализованного представления класса. Правильная поддержка библиотеки может затем преобразовываться между сериализованной формой (например, JSON) и структурами данных в памяти со статической типизацией и всеми вкусностями, которые идут с ней. Один из примеров такого подхода см. В записи Lift, в которую добавлены преобразования в JSON и из него: http://groups.google.com/group/liftweb/msg/63bb390a820d11ba

3 голосов
/ 08 марта 2011

Интересно, если вы задали правильный вопрос. Почему вы используете Scala, а не динамические языки? Возможно, из-за того, что Scala предоставляет вам что-то важное, что важно для вас и, я полагаю, для качества вашего кода. Тогда почему же вы не используете «статически типизированную» (т.е. основанную на схеме) базу данных? Еще раз, я просто предполагаю, но способность реагировать на изменения приходит на ум. Производственные базы данных SQL имеют ужасную тенденцию к тому, что их очень трудно изменить и реорганизовать.

Итак, ваши данные слабо напечатаны, а ваш код строго напечатан. Но где-то вам нужно сделать переход. Это означает, что где-то у вас будет «схема» для ваших данных, даже если в базе данных ее нет. Эта схема определяется классами, на которые вы отображаете документы Couch. Это имеет смысл; У большинства применений Couch, которые я видел, есть ключ, такой как «тип», и для каждого типа по крайней мере какой-то общий набор ключей. Нужно ли вручную сопоставлять JSON с этими классами Scala или использовать, например, причудливые инструменты отражения (медленнее, но симпатичнее) или еще более необычная функция Scala, с которой я еще не знаком, - это деталь. Начните с простого, но медленного, затем посмотрите, достаточно ли он быстр.

Большая вещь возникает, когда ваши классы, то есть ваша схема, изменяют . Вместо того, чтобы ALTER'ить свои таблицы, вы можете просто изменить класс, убедиться, что вы делаете что-то умное, если для какого-то документа отсутствует ожидаемый вами ключ (потому что он основан на более старой версии класса), и все готово. Реагировать на изменения никогда не было проще, и все же ваш код набирается максимально статически.

Если это недостаточно для вас, и вам вообще не нужна схема, тогда вы фактически говорите, что не хотите использовать классы для определения и манипулирования вашими данными. Это тоже хорошо (хотя я не могу представить себе использование), но тогда вопрос не в динамических и статических языках, а в том, стоит ли вообще использовать ОО-языки на основе классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...