Announcement

Collapse
No announcement yet.

isapi.dll -> mysql c-api

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • isapi.dll -> mysql c-api

    Hallo,
    ich schreibe grade eine isapi.dll und möchte jetzt eine Datenbank anbinden.
    Weil auf praktisch jedem Server vorhanden habe ich mich für mysql entschieden und um Overhead zu sparen für direkte Anbindung per C-Api.
    Nun bin ich aber auf die Funktionen mysql_thread_init() und mysql_thread_end() gestossen und weis zumindestens bei mysql_thread_end() nicht, wie ich es einbinden könnte?!

    Ob ein Init nötig ist könnte man ja mit wenig Aufwand im BeforeDispatch prüfen aber ein thread_end bekommt man ja gar nicht mit.

    Übersehe ich etwas oder war die c-api eine schlechte Wahl? Was wäre die beste (schnellste) Wahl auf einem Server mit einer unbekannten Anzahl von benutzern und häufigen aufrufen, in denen ja die meisten objekte je angelegt und wieder zerstört werden müssen?

  • #2
    ISAPI ist eine MS-Technik. Wie kommst du darauf auf praktisch jeden MS Windows Server ein MySQL-Server vorhanden sein müsste?
    Und was hat das jetzt mit Delphi zu tun?

    Also wenn du nun ein Windows-Server mit IIS zur Verfügung hast würde ich das nicht mit Delphi sondern mit .NET entwickeln.

    Comment


    • #3
      Okay vielleicht nicht auf jedem Server, auf jedem Webserver aber schon. Zumindest kenne ich keinen Hoster, der mysql nicht vorinstalliert hat.
      Bei Delphi möchte ich auf jeden Fall bleiben, einfach weil ich mich damit am besten auskenne.
      Welche Datenbankanbindung wäre unter diesen umständen dann die empfehlenswerteste? Also ohne riesen Aufwand threadsicher
      und keine riesen Overhead, der bei jedem Aufruf erzeugt und wieder freigegeben werden muss?

      Comment


      • #4
        Wie willst du eine isapi.dll auf einem Webserver bei einem Hoster ablegen?
        Wie willst du mit Delphi auf eine DB bei einem Hoster zugreifen? Das wird nicht möglich sein.
        Was sind "diese Umstände"? Welche Anwendungsarchitketur planst du?
        Christian

        Comment


        • #5
          Hm, wo soll das Problem dabei sein? Klar geht das nicht bei ner minimal Präsenz aber bei einem miet-Server egal ob managed oder nicht kann man problemlos so etwas machen.
          Und wenn diese isapi.dll dann wiederum dort auf nem Rechner läuft, wieso sollte sie dann nicht auf jede beliebige Datenbank zugreifen können, die dort läuft?!

          Comment


          • #6
            Entscheide dich wovon geredet wird:

            Zumindest kenne ich keinen Hoster, der mysql nicht vorinstalliert hat.
            vs

            aber bei einem miet-Server egal ob managed oder nicht kann man problemlos so etwas machen.
            Und wenn diese isapi.dll dann wiederum dort auf nem Rechner läuft,
            ja, wenn es eine Windowsinstallation ist.


            wieso sollte sie dann nicht auf jede beliebige Datenbank zugreifen können, die dort läuft?!
            Ja, das geht dann, aber eben nicht bei deiner o.a. erwähnten Vorinstallation bei einem Hoster in einer 0815 Konf.
            Christian

            Comment


            • #7
              Ich rede von einem Server im Internet, natürlich muss es dann Windows sein aber das bietet inzwischen jeder Hoster an. Bei den angeboten, die ich bisher gesehen habe ist dann auch auf diesen Windows servern mysql in der Regel vorinstalliert. Letzlich könnte man aber da man ja Vollzugriff hat auch jede andere Datenbank installieren, ist dann aber auch bei einem Managed Server für deren Wartung selbst verantwortlich.

              Also Frage anders Formuliert: Welche Datenbank ist mit welchen Zugriffskomponenten am ehesten für Zugriffe aus einer isapi.dll geeignet?
              Zu beachten ist eben, dass das ganze erstens Threadsicher sein muss und zweitens so wie ich das bisher gelesen habe alle komponenten für den Zugriff
              bei jedem Aufruf erzeugt und hinterher freigegeben werden sollten, die Komponenten sollten also nicht viel Overhead mitbringen.

              Comment


              • #8
                Ich finde dein geplantes Vorgehen wenig zielführend.

                Wenn du einen eigenen Server planst und die DB von außen erreichbar ist (Sicherheit mal außen vor), wozu dann noch eine DLL. Dann könenn die Clients direkt die Abfragen absetzen (ggf. unter einem User)

                Wenn du die DB eben nicht von außern erreichbar haben willst und die DB-Zugriffe kapseln willst, wozu dann eine Windows-DLL. Dazu wär ein Webservice besser geeignet. Diesen dann noch in eine plattformunabhängigen Version und er ist überall einsetzbar. Es wäre egal, was für ein Client darauf zugreift. Dieser könnte eine Connectionpool haben u.a.

                Was du mit Overhead meinst ist unklar. Was sollte wo diesen verursachen. Und wie passen die obigen C-Funktionen jetzt hier zu Delphi? Wenn du eine C/C++ Frage hast, gibt es hier ebenfalls einen Thread. Des Weiteren schreibt man heutzutage so etwas nicht ohne Not in C/C++.
                Zuletzt editiert von Christian Marquardt; 30.03.2013, 10:39. Reason: Rechtschreibung
                Christian

                Comment


                • #9
                  Nein, die db soll nicht von außen erreichbar sein. Es soll sich schlicht um einen Webserver handeln, der das meiste über html und css selbst erledig aber für ein paar Sachen die isapi.dll aufruft.
                  Ich bin halt ein Delhi Programmierer und mit Delphi ist das Grundsätzlich möglich. Die C-Api für MySql (für die es einen Delphi Wrapper gibt) ist mir schlicht aufgefallen, weil sie sehr schlank ist. Nur bin ich nicht sicher, ob es Probleme wegen dem Thread Handling geben kann: Diese Api benötigt die Aufrufe von Thread Start und End, den Start eines neuen Threads jkönnte ich noch mitbekommen, ein Thread Ende aber nicht, also gäbe es Speicher Lecks.

                  Comment


                  • #10
                    Wenn du eh einen eigenen Server aufsetzt, schreibe einen Webservice in Java oder die Webanwendung ("der das meiste über html und css selbst erledig"-> HTML & CSS werden nie etwas von selbst erledigen -> Request) in Java
                    Zuletzt editiert von Christian Marquardt; 30.03.2013, 11:36.
                    Christian

                    Comment


                    • #11
                      Kann mir hier nicht irgendjemand die Eingangsfrage beantworten?

                      Comment


                      • #12
                        a) in diesem Thread geht es um Architekturfragen, deren Anforderungen du mit jeder Antwort änderst (mal eine C/S Anwendung mit Delphi, mal was mit HTML/CSS)

                        b) in einem Delphi-Forum um Detailfragen zur C-Programmierung und der MySQL API, wobei nicht klar ist, wann du was warum aufrufen willst. Zeige Code oder beschreibe die Anwendung

                        c) UND JA: Deine C-API ist die schlechteste Wahl!

                        d) es lassen sich halt Fragen nicht klären, wenn die Architketur nicht steht

                        e) Vermutlich wird sich dein Problem mit der Session erschlagen lassen. Wird diese geschlossen (der Anwender ist nicht mehr aktiv), so wird auch aufgeräumt. Wie du an die rankommst ist eine andere Frage...damit wären wir bei d)
                        Zuletzt editiert von Christian Marquardt; 30.03.2013, 13:18.
                        Christian

                        Comment


                        • #13
                          Originally posted by karstenddorf View Post
                          Hallo,
                          ich schreibe grade eine isapi.dll und möchte jetzt eine Datenbank anbinden.
                          Weil auf praktisch jedem Server vorhanden habe ich mich für mysql entschieden und um Overhead zu sparen für direkte Anbindung per C-Api.
                          Nun bin ich aber auf die Funktionen mysql_thread_init() und mysql_thread_end() gestossen und weis zumindestens bei mysql_thread_end() nicht, wie ich es einbinden könnte?!

                          Ob ein Init nötig ist könnte man ja mit wenig Aufwand im BeforeDispatch prüfen aber ein thread_end bekommt man ja gar nicht mit.

                          Übersehe ich etwas oder war die c-api eine schlechte Wahl? Was wäre die beste (schnellste) Wahl auf einem Server mit einer unbekannten Anzahl von benutzern und häufigen aufrufen, in denen ja die meisten objekte je angelegt und wieder zerstört werden müssen?
                          Diese erste Frage sagt eigentlich alles ganz deutlich. Du willst mir warum auch immer die ganze Zeit einreden, dass ich was anderes Programmieren soll.

                          Das Ende der Session nützt mir nichts. Die erwähnte C-Api (auf die ich mit Delphi zugreifen will (die heißt aber nunmal so)) braucht ein Thread init und end, der Webserver beendet ja nicht einen Thread, weil eine Session endet....

                          Comment


                          • #14
                            der Webserver beendet ja nicht einen Thread, weil eine Session endet....
                            Nein, dass musst du programmieren.

                            Diese erste Frage sagt eigentlich alles ganz deutlich. Du willst mir warum auch immer die ganze Zeit einreden, dass ich was anderes Programmieren soll.
                            Du hast nach der Sinnhaftigkeit gefragt.

                            Übersehe ich etwas oder war die c-api eine schlechte Wahl?
                            Ja, ein Applikationserver erfüllt deine Anforderungen besser. Und Frameworks die einen Connectionpool unterstützen ebenfalls....Damit würde dein Problem entfallen.
                            Christian

                            Comment


                            • #15
                              Die DEVArt - Komponenten liefern einen ganz einfachen Zugriff auf MySQL und sind threadsicher.
                              Allerdings kann man die wohl nicht einfach einem BDE Programm unterschieben. Es gibt aber einen Migrationsassistenten. Bei so was heiklem wie einem Webserver würde ich schon auf so etwas bewährtes setzen.
                              Viel Erfolg
                              Tino
                              Ich habs gleich!
                              ... sagte der Programmierer.

                              Comment

                              Working...
                              X