запрос на MUMPS от asp.net/C# - PullRequest
       32

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

4 голосов
/ 31 августа 2009

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

У нас есть требование сделать запрос из базы данных MUMPS (Mckesson STAR Patient care), и когда мы используем KBSQL, он ограничен для 6 одновременных пользователей. Поэтому мы пытаемся запросить MUMPS напрямую, не используя KBSQL.

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

Ответы [ 5 ]

4 голосов
/ 07 ноября 2009

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

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

Michael

3 голосов
/ 07 ноября 2011

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

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

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

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

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

3 голосов
/ 11 сентября 2009

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

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

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

  2. Чтение в XML с использованием LINQ to XML

  3. Запуск запросов LINQ.

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

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

2 голосов
/ 15 июня 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. в необработанном виде.

1 голос
/ 11 сентября 2009

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

...