Damit meine Firma viele Daten in einer Foxpro-Datenbank speichert und versucht, den Leistungseinbruch zu umgehen, indem ich sie direkt berühre, dachte ich daran, alles zu melden, was asynchron für ein schnelleres Benutzererlebnis getan werden kann. Ich fing an, ActiveMQ zu betrachten, weiß aber nicht, wie gut C # damit umgehen wird. Ich will hören, was ihr alle denkt.
edit: Es wird eine Webanwendung sein. Alles, was diesen Foxpro berührt, ist irgendwie langsam (wahrscheinlich, weil die Person, die es vor 10 Jahren eingerichtet hat, alles zur Hölle durcheinander gebracht hat, einige der Tabellendateien sind unglaublich groß). Wir replizieren die Foxpro zu SQL-Nacht und die meisten unserer Daten lesen sind okay, ein Tag alt zu sein, so konzentrieren wir uns auf die Schreibvorgänge. Außerdem wirkt sich das Schreiben auf einen kritischen Teil des Benutzererlebnisses (Kauf) aus, wir speichern es in SQL und dann einfach eine Nachricht, um es in FoxPro einzufügen, wenn es möglich ist. Ich wünschte, wir könnten den foxpro einfach loswerden, leider will die Firma nicht eine sehr alte Software, die sie gekauft haben, loswerden, die davon abhängt.
ActiveMQ funktioniert gut mit C # unter Verwendung der Spring.NET-Integrationen und NMS. Ein Beitrag mit einigen Links, um Sie in diese Richtung zu bringen. ist hier . Ziehen Sie auch die Verwendung von MSMQ (System.Messaging-Namespace) oder einer .NET-basierten asynchronen Messaging-Lösung in Betracht, mit einige Optionen hier .
MSMQ (Microsoft Message Queuing) ist möglicherweise eine gute Wahl. Es ist Teil des Betriebssystems und als eine optionale Komponente vorhanden (kann über Software / Windows-Komponenten installiert werden), was bedeutet, dass es kostenlos ist (solange Sie bereits für Windows bezahlt haben). MSMQ stellt Win32 / COM und System.Messaging APIs bereit. Modernere Windows Communication Foundation (alias Indigo) Kanäle in der Warteschlange verwenden auch MSMQ. Beachten Sie, dass MSMQ nicht in Home-SKUs von Windows (XP Home und Vista Home) unterstützt wird
Es ist erwähnenswert, dass das ActiveMQ-Open-Source-Projekt eine C # API für Messaging namens NMS , mit dem Sie gegen eine einzelne C # / .Net API entwickeln können, die dann verschiedene Messaging-Backends wie
verwenden kannEntschuldigung, wenn Sie nicht danach fragen ... Haben Sie eine Art Cache hinter den Kulissen betrachtet, der ein wenig wie das "Bucket-System" funktioniert, wenn asynchrone Sockets in c / c ++ mit winsock verwendet werden? Grundsätzlich funktioniert es, indem es Anfragen annimmt und eine sofortige Antwort an die Web-App sendet. Wenn es schließlich dazu kommt, Ihren Datensatz zu finden, wird es in der App über AJAX oder eine andere Technologie Ihrer Wahl aktualisiert. Da ich kein C # -Programmierer bin, kann ich kein konkretes Beispiel nennen. Hoffe das hilft!
Verwendet die Fox App .CDX-Indizes? Wenn dies der Fall ist, können Sie möglicherweise die Leistung verbessern, indem Sie Indizes hinzufügen, ohne einen Programmcode ändern zu müssen. Wenn es jedoch .IDX-Indizes verwendet, müsste die Änderung in der aktuellen App vorgenommen werden.
Da das Problem mit den Schreibvorgängen ist, würde ich mehr auf & lt; entfernen & lt; alle nicht benötigten Indizes für die Tabellen. Wie in RDBMS üblich, verlangsamt jeder Index einer FoxPro-Tabelle eine Schreiboperation, da die Indizes aktualisiert werden müssen. Da Sie nicht direkt von der Tabelle lesen (oder vermutlich direkt abfragen), sollten Sie nicht sehr viele Indizes benötigen . Möglicherweise möchten Sie auch alle Auslöser oder Feldregeln für die Tabellen überprüfen, da sie die Schreiboperation möglicherweise verlangsamen. Stellen Sie sicher, dass Ihre referenzielle Integrität noch erhalten bleibt.