запрос на MUMPS из asp.net/C#

Кто-нибудь знает, как делать запросы из базы данных MUMPS с помощью С# без использования KBSQL -ODBC?

У нас есть требование к базе данных MUMPS (уход за пациентами Mcesson STAR), и когда мы используем KBSQL, он ограничен 6 одновременными пользователями. Итак, мы пытаемся запросить MUMPS напрямую, без использования KBSQL.

Я ожидаю что-то вроде LINQ TO MUMPS.


person porhills    schedule 31.08.2009    source источник
comment
Привет, Эрик. Да, ты прав... У меня тяжелые времена, но я надеюсь, что кто-нибудь даст мне подсказку.   -  person porhills    schedule 31.08.2009


Ответы (5)


Я думаю, что Mckesson использует Cache от Intersystems в качестве поставщика свинки (M). Кэш поддерживает .Net (см. документацию здесь). У Джесси Либерти есть неплохая статья при использовании C#, .Net и Windows Forms в качестве внешнего интерфейса для базы данных Cache.

Я не уверен в LINQ (я здесь не эксперт), но это может дать вам представление о том, с чего начать выполнение вашего проекта.

Майкл

person igotmumps    schedule 07.11.2009

Во-первых, я тоже чувствую твою боль. У меня был неудачный опыт разработки в MagicFS/Focus пару лет назад, и у нас был точно такой же запрос на поддержку реляционных запросов. Почему люди всегда хотят того, чего не могут иметь?

В любом случае, если версия MUMPS, которую вы используете, похожа на MagicFS/Focus, и у вас есть доступ к файловой системе, которая содержит «базу данных» (плоские файлы), то один из возможных путей:

  1. Экспортируйте плоские файлы в файлы XML. Для этого вам придется вручную создать XML из плоских файлов, используя MUMPS или выбранный вами язык. Как бы болезненно это ни звучало, MUMPS может быть выходом, поскольку вы можете не захотеть определять текущую запись вручную.

  2. Чтение XML с помощью LINQ to XML

  3. Выполнение запросов LINQ.

Конечно, первый шаг легче сказать, чем сделать, и может быть даже сложнее, если вы пытаетесь создать XML-файлы на лету. Вариантом этого может быть управление генерацией XML-файлов, таких как индексы, с помощью ночного серверного процесса и т.п.

Если вы собираетесь запрашивать только определенным образом (например, я хочу присоединиться к таблицам Foo и Bar по идентификатору, и это все, что я хочу), я бы вместо этого рассмотрел возможность извлечения и кэширования этих данных в коллекции С# на стороне сервера и пропустить запросы в целом (или перетащите их с помощью WCF или тому подобного, а затем выполните свои запросы LINQ).

person emptyset    schedule 11.09.2009

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

Используйте KB/SQL ODBC через средний уровень (либо DAL в вашем приложении), либо отдельную службу (службу Windows).

Этот компонент может общаться с базой данных MUMPS, используя не более 6 отдельных потоков (в соответствии с ограничением KB/SQL).

Компонент может использовать ADO.NET для ODBC для связи с драйвером ODBC KBSQL. Затем вы можете использовать данные из своего приложения с помощью LINQ для ADO.NET.

Возможно, вам потребуется использовать систему очередей, такую ​​как MSMQ, для управления очередями запросов данных. если 6 одновременных подключений недостаточно для объема запросов. Рекомендуется ставить запросы в очередь и использовать асинхронные вызовы LINQ, чтобы не блокировать взаимодействие с пользователем.

person santhosh    schedule 07.11.2011

Все текущие реализации языка MUMPS имеют возможность указывать программы MUMPS, которые отвечают на соединение TCP/IP. Собственная база данных MUMPS структурирована как иерархия упорядоченных пар с несколькими ключами и значениями, что по существу представляет собой надмножество парадигмы NoSQL.

KB/SQL — это группа программ, которые отвечают на запросы SQL/ODBC, преобразовывают их в эти «глобальные» запросы данных MUMPS, извлекают и объединяют результаты из MUMPS, а затем отправляют данные обратно в форме, заданной протоколом SQL/ODBC. ожидает.

Если у вас есть разрешения/авторизация безопасности для вашей реализации, которая позволяет вам создавать и запускать MUMPS-программы (называемые «подпрограммами»), то вы можете отвечать на любой протокол, который пожелаете, из этих программ. Системы MUMPS могут выдавать текстовые или двоичные результаты через порт TCP/IP или файл операционной системы хоста. Многие поставщики явно запрещают вам делать это в своих контрактах на предоставление медицинских и финансовых решений.

Насколько мне известно, синтаксис LINQ является проприетарным продуктом Microsoft, хотя, безусловно, существуют проекты с открытым исходным кодом, подобные LINQ. Я не видел никакого формального определения линейного протокола для LINQ, но если оно есть, можно написать процедуру MUMPS для связи с использованием этого протокола. Однако это должно было бы сделать что-то похожее на KB/SQL, поскольку ни синтаксис LINQ, ни синтаксис SQL не очень близки к собственному синтаксису MUMPS.

Механизм структурирования и хранения данных MUMPS может быть механически переведен в синтаксис XML. Это все еще может потребовать значительных усилий, так как крайне маловероятно, что поставщик вашей системы предоставит DTD, определенный для этого механически созданного синтаксиса XML, и вам все равно придется иметь дело с закодированными значениями и ссылками, которые хранятся в системе на основе MUMPS. в их сыром виде.

person David Whitten    schedule 14.06.2011

Какого поставщика и версию MUMPS вы используете? Решение, несомненно, будет зависеть от предоставленного поставщиком API.

person John Brown    schedule 11.09.2009