Любой способ получить Метеор, используя родной ACID-совместимый дБ?

Я серьезно рассматриваю инфраструктуру Meteor для создания каждого POC и приложений в будущем... но я не могу использовать ACID-совместимую базу данных, поскольку у меня есть несколько случаев использования атомарных транзакций с несколькими документами, которые требуют этого соответствия.

В настоящий момент Meteor сильно полагается на синтаксис и механизм хранения MongoDB (это означает, что нет доступного синтаксиса, связанного с "транзакцией"...)

В настоящее время я оцениваю любое решение, позволяющее эту возможность ACID:

  • Использование собственного драйвера MySQL для Meteor (синтаксис отличается от MongoDB?)
  • Использование собственного драйвера PostgreSQL для Meteor (синтаксис SQL)
  • Использование TokuMX (форк MongoDB с соответствием ACID... тот же синтаксис, что и у приложения MongoDB из команд, связанных с транзакциями, которые необходимо будет добавить)

Эти 3 решения являются хорошими кандидатами для дорожной карты Метеор, как показано здесь

Какие плюсы / минусы в этом решении? Какие из них самые передовые? Что вы хотя бы считаете решением сохранить Meteor при хранении документов в NoSQL, например, в ACID-совместимых БД?

3 ответа

Решение

Я наконец подделал свой собственный вывод...

У меня будет две платформы:

  • фронт Meteor с бизнес-данными в PostgreSQL и некоторыми фронтальными данными или легко реплицируемыми данными в MongoDB
  • серверная часть данных Java (только server2server), обрабатывающая все элементарные операции с моими бизнес-данными в PostgreSQL... плюс технические адаптеры (SAP, Salesforce), механизм рабочих процессов BPMN 2.0 (Actility) и любой зарегистрированный SOA, необходимый из других систем

Любые комментарии по-прежнему очень приветствуются и будут рассмотрены и ответили

sqlAndMeteor

Если вы похожи на меня, вы любите Метеор, но ненавидите Монго. В "Метеорной" дорожной карте Trello ( https://trello.com/b/hjBDflxp/meteor-roadmap) наиболее популярной функцией является поддержка SQL, PostgreSQL или MySQL.

Поскольку в Метеоре нет даты для этого, здесь я кратко излагаю частичные решения, которые я нашел.

1.- Используйте SQL только для клиентских запросов.

Посмотрим правде в глаза, Mongo сосет на обычных операциях с данными, поэтому возможность использовать SQL для запроса данных (с JOINS, GRUP BY и т. Д.) Избавит от многих проблем. Существуют пакеты, которые позволяют вам использовать SQL в клиенте, по крайней мере, для запросов: Самый простой из них - старая (2010 г.) утилита SqlLike ( http://www.thomasfrank.se/sqlike.html). Новый игрок в городе - alaSQL, который активно разрабатывает @agershun ( https://github.com/agershun/alasql). Преимущество SqlLike в том, что у него всего 10k. AlaSQL, конечно, намного мощнее, но для использования SQL для замены синтаксиса mongo в объединениях и агрегациях SqlLike в порядке.

С обоими из них вы можете сделать что-то вроде этого в вашем помощнике:

productsSold:function(){
  var customerSalesHistory=salesHistory.find({cutomerId:Session.get('currentCustomer')}).fetch();
  var items=products.find().fetch();
  return alasql("select item.name, sales.ordered as sumaVentas from ? sales, ? items
      where items.Id=sales.itemId",[customerSalesHistory,items]);
}

2.- Экспериментируйте с прямой поддержкой SQL.

Некоторые пакеты пытаются заменить Mongo (и minimongo) на MySql или PostgreSQL. MySql @ numtel - это Meteor-MySql https://github.com/numtel/meteor-mysql, а PostgreSQL - это Meteor-pg ( https://github.com/numtel/meteor-pg). Оба являются хорошими попытками решить проблему, но у них еще есть некоторые проблемы, и их сложно адаптировать.

Команда из Hack Reactor сформировала Meteor Stream, и ее первым продуктом является интеграция PostgreSql с Meteor, meteor-postgres ( https://github.com/meteor-stream/meteor-postgres). Это выглядит очень хорошо и использует alaSql на клиенте, чтобы заменить minimongo.

Оба подхода хороши, но у них есть некоторые проблемы:

Они сломали развертывание к метеору. Они очень, очень молоды и не готовы к производству AFAIK. Они все еще требуют настройки обычного синтаксиса pub-sub, к которому мы привыкли, что может вызвать проблемы совместимости с другими пакетами Meteor. 3.- По-прежнему использовать Mongo, но в качестве простого хранилища для вашей базы данных MySql.

Эта опция поддерживает все характеристики Meteor и использует Mongo в качестве временного хранилища для ваших баз данных MySql или PostgreSql.

Блестящая попытка этого - mysql-shadow от @perak ( https://github.com/perak/mysql-shadow). Он делает то, что говорит, синхронизирует Mongo в обоих направлениях с MySql и позволяет вам обрабатывать ваши данные в MySql.

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

Для полнофункциональной синхронизации вы можете использовать SymmetricsDS ( http://www.symmetricds.org/), очень хорошо протестированный репликатор базы данных. Конечно, это включает в себя настройку нового java-сервера, но на сегодняшний день это лучший способ убедиться, что вы сможете конвертировать свою базу данных Mongo в простое хранилище вашей реальной базы данных MySql, PostgreSQL, SQL Server, Informix. Я должен проверить это сам.

На данный момент MySQL Shadow кажется достаточно хорошим решением.

Одним из преимуществ этого подхода является то, что вы все еще можете использовать все стандартные функции Meteor, пакеты, развертывание Meteor и так далее. Вам не нужно ничего делать, кроме как настроить механизм синхронизации, и вы ничего не нарушаете.

Кроме того, если когда-нибудь команда Meteor использует часть средств, полученных от интеграции с SQL, ваше приложение, скорее всего, будет работать как есть.

Если у вас работает MySQL, я использовал пакет meteor-mysql, и он работает хорошо.

Другие вопросы по тегам