# Datenbankzugriffe ?



## Joob (13. Okt 2017)

Hallo
ich versuche gerade einige Basisklassen für eine Anwendung zu programmieren.
Login, Suche, Sperren, Transformen usw.

Bisher kenne ich den Zugriff auf eine lokale Datenbank
und bei einem Hoster mit php, hab ich mal im Rahmen einer App gelernt (android studio)

Also zur Frage:
Was gibt es noch an wichtigen Konzepten um auf Datenbanken zuzugreifen ?
Ich möchte das vereinheitlichen, ohne dabei wichtige Konzepte außer Acht zu lassen.
Also es geht nicht um exotisches sondern um die wichtigsten.


----------



## JuKu (18. Okt 2017)

Ich fasse deine Frage mal zusammen:
Du möchtest Abstraktion zu einem System hinzufügen, welches du selbst nicht gut genug kennst.
Das wird extrem schwierig, denn wenn du alle Use Cases abdeckst, die man brauchen könnte, dann kannst du deine Abstraktion wegschmeißen. Abstraktion hat man meist einen Zweck, z.B. in deinem Fall vermutlich Vereinfachung der Api oder soweit weg zu abstrahieren, dass man die Implementierung austauschen kann, Stichwort Plattform-Unabhängigkeit.

Welche Datenbank willst du denn überhaupt unterstützen? Es gibt so viele DBMS Systeme...
Die erste Unterteilung wäre zwischen RDBMS (Relational Database Management System) und NoSQL Datenbanken.
NoSQL Datenbanken wirst du so aber vermutlich nicht erfassen können.
Ich vermute du willst auf MySQL hinaus? Dafür gibt es bereits eine Abstraktion, die nennt sich JDBC Treiber.


----------



## mrBrown (18. Okt 2017)

JuKu hat gesagt.:


> Die erste Unterteilung wäre zwischen RDBMS (Relational Database Management System) und NoSQL Datenbanken.
> NoSQL Datenbanken wirst du so aber vermutlich nicht erfassen können.
> Ich vermute du willst auf MySQL hinaus? Dafür gibt es bereits eine Abstraktion, die nennt sich JDBC Treiber.


Oder eine Ebene höher mit z.B. Repository oder DTO-Pattern, damit ist auch NoSQL kein Problem


----------



## Joob (18. Okt 2017)

Erst mal schönen Dank für die Gedanken die ihr euch gemacht habt.

Gut das Ihr es erwähnt, ich möchte nur SQL Datenbanken betrachten.
Grund für meine Frage ist folgender:
Ich kenne den direkten Datenbankzugriff per jdbc,
und den über einen Hoster welcher nur den indirekten Zugriff per PHP zulässt.

Ich wollte einfach nur wissen gibt, es auf dieser Ebene noch andere Zugriffskonzepte. 
Ich hab halt nicht so viel Erfahrung und will da lieber nachfragen.

Ziel ist es aus der APP heraus, über eine Klasse, mit immer der gleichen Notation, die
Datenbank, welche vielleicht beim Hoster liegt oder lokal oder im Netzwerk, über eine 
angepasste Klasse, abzufragen und dann, eine Datenstruktur (Array, Liste ...) zurückzuerhalten.


----------



## mrBrown (18. Okt 2017)

Joob hat gesagt.:


> über einen Hoster welcher nur den indirekten Zugriff per PHP zulässt


Das bedeutet was?



Joob hat gesagt.:


> Ziel ist es aus der APP heraus, über eine Klasse, mit immer der gleichen Notation, die
> Datenbank, welche vielleicht beim Hoster liegt oder lokal oder im Netzwerk, über eine
> angepasste Klasse, abzufragen und dann, eine Datenstruktur (Array, Liste ...) zurückzuerhalten.





mrBrown hat gesagt.:


> z.B. Repository oder DTO-Pattern


----------



## Thallius (18. Okt 2017)

mrBrown hat gesagt.:


> Das bedeutet was?



Das die meisten Webhoster es nicht erlauben direkt von aussen auf ihre Datenbanken zuzugreifen. Da kannste jdbc etc komplett vergessen. Und das ist auch gut so!


----------



## Thallius (18. Okt 2017)

Joob hat gesagt.:


> Ich wollte einfach nur wissen gibt, es auf dieser Ebene noch andere Zugriffskonzepte.
> Ich hab halt nicht so viel Erfahrung und will da lieber nachfragen.



Ich kann nur empfehlen immer über einen Webservice zu gehen. Ob der jetzt in PHP oder Python, Node oder wenn es ganz schlimm kommt meinetwegen auch in Spring geschrieben ist, ist dabei nebensächlich. Fakt ist, wenn Du übers Netz direkt mit jdbc auf eine Datenbank zugreifst und der Netz-Betreiber auch nur ein wenig was auf Sicherheit hält, dann wird bei direkten Zugriffen dir jede vernünftig konfigurierte Firewall so richtig schön einen Strich durch die Rechnung machen, da jedes gesendete und empfangene Datenpaket erstmal auf Viren und andere schädiche Dinge überprüft wird. Hast Du dann eventuell noch eine VPN Verbindung über mehrere Proxies mit mehreren Firewalls bleibt am Ende eine Performance das du die Bits mitzählen kannst.

Gruß

Claus


----------



## mrBrown (18. Okt 2017)

Thallius hat gesagt.:


> Das die meisten Webhoster es nicht erlauben direkt von aussen auf ihre Datenbanken zuzugreifen. Da kannste jdbc etc komplett vergessen. Und das ist auch gut so!


Ich weiß...ich wüsste trotzdem gern, was er mit "indirektem Zugriff" meint...


----------



## Thallius (18. Okt 2017)

mrBrown hat gesagt.:


> Ich weiß...ich wüsste trotzdem gern, was er mit "indirektem Zugriff" meint...



Hat er doch geschrieben. Über PHP z.B. also über einen Webservice.


----------



## JuKu (18. Okt 2017)

mrBrown hat gesagt.:


> Oder eine Ebene höher mit z.B. Repository oder DTO-Pattern, damit ist auch NoSQL kein Problem



Stimmt. Allerdings stelle ich mir das bei Graphen mit Graph Datenbanken auch ganz schön schwierig vor. 

Ansonsten stimme ich @mrBrown und @Thallius da vollkommen zu.


----------



## mrBrown (18. Okt 2017)

JuKu hat gesagt.:


> Stimmt. Allerdings stelle ich mir das bei Graphen mit Graph Datenbanken auch ganz schön schwierig vor.


Nö, geht durchaus - z.B. Spring Data Neo4j setzt das um


----------



## JuKu (23. Okt 2017)

@mrBrown Da hast du natürlich recht, allerdings leidet laut der offiziellen Spring Dokumentation dann die Performance darunter:
https://docs.spring.io/spring-data/...ASE/reference/html/reference_performance.html
https://docs.spring.io/spring-data/...ASE/reference/html/reference_performance.html
Diese Library wurde eben nicht mit Fokus auf Performance entwickelt, tut aber für bestimmte Use Cases einfach ihren Zweck. Hier muss man wohl gut abwägen, was einem wichtiger ist.


----------



## mrBrown (23. Okt 2017)

JuKu hat gesagt.:


> @mrBrown Da hast du natürlich recht, allerdings leidet laut der offiziellen Spring Dokumentation dann die Performance darunter:
> https://docs.spring.io/spring-data/...ASE/reference/html/reference_performance.html


Ja - aber eben hauptsächlich durch Reflection, laut denen.

Den Overhead hat man nunmal durch solch generische Umsetzungen, auch bei normaleren relationalen oder NoSQL-DBs.
Schreibt man die Dinge per Hand, fällt das schon mal weg.


----------



## JuKu (28. Okt 2017)

Jo. Da hast du recht!


----------

