Что использовать для обмена сообщениями с C # - PullRequest
10 голосов
/ 07 августа 2008

Итак, моя компания хранит много данных в базе данных foxpro и, пытаясь обойти производительность, касаясь ее напрямую, я думал об обмене сообщениями обо всем, что может быть сделано асинхронно для более быстрого взаимодействия с пользователем. Я начал смотреть на ActiveMQ , но не знаю, насколько хорошо C # с этим справится. Желая услышать, что думают все вы, ребята.

edit: это будет веб-приложение. Все, что касается этого foxpro, довольно медленно (возможно, потому, что человек, который его установил 10 лет назад, все испортил, некоторые файлы таблиц невероятно велики). Мы копируем foxpro в sql по ночам, и большинство наших операций чтения данных в порядке, когда нам исполнилось сутки, поэтому мы сосредоточены на записи. Кроме того, запись влияет на критически важную часть взаимодействия с пользователем (покупка), мы сохраняем ее в формате sql, а затем просто отправляем сообщение, чтобы она могла быть добавлена ​​в foxpro, когда это возможно. Хотелось бы, чтобы мы могли просто избавиться от foxpro, к сожалению, компания не хочет избавляться от очень старого программного обеспечения, которое они купили, которое зависит от него.

Ответы [ 7 ]

6 голосов
/ 07 августа 2008

ActiveMQ хорошо работает с C # с использованием интеграции Spring.NET и NMS. Сообщение с некоторыми ссылками, чтобы вы начали в этом направлении здесь . Также рассмотрите возможность использования MSMQ (пространство имен System.Messaging) или решения для асинхронного обмена сообщениями на основе .NET, с некоторыми вариантами здесь .

4 голосов
/ 19 сентября 2008

MSMQ (Microsoft Message Queuing) может быть отличным выбором. Он является частью операционной системы и представлен в качестве дополнительного компонента (может быть установлен через «Установка и удаление программ» или «Компоненты Windows»), что означает, что он бесплатный (если вы уже заплатили за Windows, конечно). MSMQ предоставляет Win32 / COM и System.Messaging API. Более современные Windows Communication Foundation (также известные как Indigo) каналы с очередями также используют MSMQ. Обратите внимание, что MSMQ не поддерживается в домашних SKU Windows (XP Home и Vista Home)

1 голос
/ 14 октября 2008

Возможно, вы захотите взглянуть на MSMQ. Он может использоваться .NET и VFP, но вам нужно будет переписать их. Вот статья, в которой рассказывается, как использовать MSMQ из VFP. http://msdn.microsoft.com/en-us/library/ms917361.aspx

1 голос
/ 16 сентября 2008

Стоит отметить, что проект с открытым исходным кодом ActiveMQ определяет C # API для обмена сообщениями под названием NMS , который позволяет вам разрабатывать на основе одного C # / .Net API, который затем может использовать различные бэкенды сообщений, такие как

0 голосов
/ 18 сентября 2008

Поскольку проблема с записями, я бы больше смотрел на> удаление <любых ненужных индексов в таблицах. Как это часто бывает в RDBMS, каждый индекс в таблице FoxPro замедляет операцию записи, так как индексы должны быть обновлены, и поскольку вы не читаете напрямую из таблицы (или, по-видимому, напрямую запрашиваете) из таблицы, вам не нужно много индексов. , Вы также можете посмотреть на любые триггеры или правила полей в таблицах, так как они могут замедлять операцию записи. Убедитесь, что ваша ссылочная целостность все еще сохраняется, хотя .. </p>

0 голосов
/ 22 августа 2008

Использует ли приложение Fox индексы .CDX? Если это так, вы можете улучшить производительность, добавив индексы без необходимости изменения какого-либо программного кода. Однако, если он использует индексы .IDX, изменение должно быть сделано в реальном приложении.

0 голосов
/ 07 августа 2008

Извините, если это не то, что вы просите ... Рассматривали ли вы какой-то кэш за кулисами, который немного напоминает «систему корзины» при использовании асинхронных сокетов в c / c ++ с использованием winsock? По сути, он работает, принимая запросы и отправляя немедленный ответ обратно в веб-приложение, и, когда он наконец находит способ найти вашу запись, он обновляет ее в приложении через AJAX или любую другую технологию по вашему выбору. Поскольку я не программист на C #, я не могу привести какой-либо конкретный пример. Надеюсь, это поможет!

...