Welche Programmiersprache für Arbeitsspeicherprogrammierung?

Mr.Steady

Cadet 1st Year
Registriert
Mai 2019
Beiträge
8
Hallo,
hätte da eine Frage, und zwar habe ich einen Server und da ich schon viel davon gehört habe dazu, dass bei Firmen-Server, grade wenn SAP S4 Hana im Einsatz ist alles wichtige, das nicht gerade archiviert wird im Arbeitsspeicher verwaltet wird.
Nun wäre meine Frage, mit welcher Programmiersprache ich so etwas machen kann, heißt welche Programmiersprache mächtig genug ist den Arbeitsspeicher zu programmieren?
 
C, C++ z.b.?
 
  • Gefällt mir
Reaktionen: blubberz
C/C++/Rust

Prinzipiell geht das mit jeder Programmiersprache, allerdings hast du mit den oben genannten die grösste Kontrolle darüber, was im Arbeitsspeicher landet und wie es verwaltet wird
 
  • Gefällt mir
Reaktionen: ChaosCoders und KitKat::new()
Mr.Steady schrieb:
heißt welche Programmiersprache mächtig genug ist den Arbeitsspeicher zu programmieren?

Wie willst du denn den RAM programmieren ? Du kannst ihn nur adressieren.

Das ganze von dir klingt aber nach einem XY Problem. Was willst du denn überhaupt machen. Schau dir mal Sachen wie Memcached an
 
  • Gefällt mir
Reaktionen: cK31-Spiced, ZuseZ3, Madman1209 und eine weitere Person
Hi Mr.Steady,

ich denke du gehst die Sache gedanklich Falsch an.
Grundsätzlich arbeitet jede Sprache und jedes Programm im Arbeitsspeicher bis die Daten zur Speicherung auf HDD/SSD abgelegt werden. Bei SAP S4 HANA geht es hauptsächlich darum, dass die Gesamte Datenbank mit allen enthaltenden Daten im Arbeitsspeicher gehalten wird und nicht wie bei anderen Datenbanksystem in Dateien auf der Festplatte.
 
  • Gefällt mir
Reaktionen: Web-Schecki, Nilson und Xes
Ich will Daten Dauerhaft im Arbeitsspeicher halten, sodass ich sie ohne Performanceverlust wieder abrufen kann.
 
Ich denke dieses Dokument zeigt, dass das Thema weniger an der Programmiersprache (aka Implementierung) als an den zugrundeliegenden Ansätzen liegt.

Auch unabhängig davon gibt es diverse Möglichkeiten Dinge in den RAM zu schieben, in jeder Programmiersprache.
 
  • Gefällt mir
Reaktionen: maxpayne80, Madman1209, konkretor und eine weitere Person
Mr.Steady schrieb:
Ich will Daten Dauerhaft im Arbeitsspeicher halten, sodass ich sie ohne Performanceverlust wieder abrufen kann.

Solange dein Programm läuft werden die Daten im RAM gehalten, evtl. ausgelagert je nachdem wie die Auslastung und Nutzung aussieht.
Das Hauptproblem ist du verlierst die Daten wenn der Strom weg ist.
Arbeitsspeicher ist flüchtig und damit auf andauende Spannung angewiesen.
 
  • Gefällt mir
Reaktionen: Xes
Ich glaube du vermischt da die Idee von in in-memory Datenbanken mit Programmiersprachen. Ich hab es selbst noch nie verwendet, aber das SAP HANA das du erwähnst ist eine in-memory column-based Datenbank.

In praktisch jeder Programmiersprache verwaltest du RAM, mal sehr explicit wie z.B. in C/C++ oder relativ automatisch in GC-basierten Sprachen. In beiden Fällen sind deine Variablen im Hautpspeicher (wenn das OS nicht auslagert).

Für mich hört es sich so an als ob das erste das du dir ansehen solltest Datenbanken sind, nicht Programmiersprachen.
 
Mr.Steady schrieb:
Ich will Daten Dauerhaft im Arbeitsspeicher halten, sodass ich sie ohne Performanceverlust wieder abrufen kann.
Google mal "RAM-Disk."
Das dürfte vermutlich eher dem entsprechen, nachdem du eigentlich suchst.
 
  • Gefällt mir
Reaktionen: ZuseZ3, konkretor, Nilson und eine weitere Person
+1 RAM Disk. Ich vermute aber eh ein XY Problem. Normalerweise braucht man sowas nicht und wenn doch, dann weiß man eigentlich ganz genau warum und grob was und wie.


Siehe ansonsten z.B. hier: Postgresql
Postgres manages a “Shared Buffer Cache”, which it allocates and uses internally to keep data and indexes in memory. This is usually configured to be about 25% of total system memory for a server running a dedicated Postgres instance, such as all Heroku Postgres instances.
Postgresql arbeitet von sich aus schon hart mit memory caches. Da anzusetzen und dem DBMS mehr caching zu ermöglichen bei relevanten queries ist vermutlich der sinnvolle Ansatz.
 
  • Gefällt mir
Reaktionen: ReignInBlo0d
Cokocool schrieb:
Wenn du jetzt jetzt sowas programmieren willst, dann bist du in 5 Jahren noch nicht fertig...
Das kommt doch wohl auf den Umfang an. Einen in-memory Key-Value Store mit REST API kann ich dir in 10 Minuten bauen. Wahrscheinlich sogar in 5 Minuten, wenn ich auf Spring oder Quarkus setze.

Aber grundsätzlich kann man auch in C/C++ nicht "viel" mit dem RAM anstellen: malloc und calloc und free. Das macht keinen riesigen Unterschied gegenüber Java oder Node.js aus. Dort wird sich halt um das "free" automatisch gekümmert, was im Worst Case natürlich nach hinten losgehen kann, wenn der RAM nicht üppig dimensioniert ist.
Du kannst aber auch mit C / C++ nicht "einfach so" auf den Speicher von anderen Programmen zugreifen, oder ihn manipulieren.
Die eigentliche Programmlogik musst du am Ende natürlich immer noch schreiben.

Ich würd's einfach erst mal in einer vertrauten Sprache schreiben. Und wenn man dann merkt, dass man noch 5% mehr Performance und Kontrolle braucht, kann man seinen Code immer noch zu C oder C++ oder ASM portieren.
 
Wie schon gesagt wurde, kann man Arbeitsspeicher nicht "programmieren". Letztendlich musst du etwas genauer beschreiben, was du überhaupt machen willst.
 
  • Gefällt mir
Reaktionen: breedmaster
Hat hier jemand ein völlig falsche Vorstellung vom Programmieren?

Wenn man ein Programm schreibt, sind unabhängig von der Programmiersprache alle "Daten", die man sich "merkt" (also Variablen) automatisch im Arbeitsspeicher. Solange man nicht explizit etwas programmiert, um die Daten auf die Festplatte oder SSD zu schreiben, bleibt das auch so. Das können auch problemlos zig Gigabyte an Daten sein. Es gibt wirklich nicht Simpleres, als alle Daten die ganze Zeit im Speicher zu halten. Aber die Daten sind dann auch automatisch alle für immer verloren, wenn man das Programm beendet.

Die schon genannten In-Memory-Datenbanken erlauben es dann, mehr Struktur in diese Daten zu bringen, und eine Reihe von Suchanfragen oder Aktualisierungen darauf durchzuführen, und zwar mit mehr Komfort als die Programmiersprache alleine es her gibt.

Wichtig wird etwas anderes als der Arbeitsspeicher dann, wenn man die Daten doch dauerhaft benötigt, auch am nächsten Tag, wenn zwischendurch der Rechner neu gestartet wird. Denn dann muss man sie irgendwann ja doch mal aufs Laufwerk packen. Und dafür nimmt man dann ab einer bestimmten Menge von Daten am besten eine reguläre Datenbank, z.B. einen SQL-Datenbankserver wie MySQL oder Postgres.

Und diese dicken Datenbankserver bieten dann wieder von sich aus eine Reihe von Einstellungen, mit denen man konfigurieren kann, wie viel von den Daten, mit denen gearbeitet wird, zwischendurch im Arbeitsspeicher zwischengespeichert wird, um schneller darauf zugreifen zu können. Das nennt man dann Memory Cache.

Fazit: Es spielt keine Rolle, welche Programmiersprache genutzt wird, denn bei allen sind ohne spezielle Vorkehrungen alle Daten im Arbeitsspeicher. Wichtig ist, welche Lösung man nutzt, um die Daten nicht im Arbeitsspeicher zu haben.
 
  • Gefällt mir
Reaktionen: _Reaper, Web-Schecki, Nilson und 5 andere
Wenn du SAP Hana sagst und dort mehr reinschnuppern möchtest. Auf der Hana läuft die XSA Runtime, diese bietet Standardmäßig Java und Node.JS. Weitere Sprachen kannst du selbst hinzufügen, gibt fertige Pakete (Cloud Foundry) für Python, PHP, ... einfach mal in die SAP Dokumentation dafür schauen. Sonst ist das erstmal nur eine Datenbank wie Oracle, MSSQL, ...

wenn du auf S/4 gehen möchtest musst du in Richtung ABAP schauen. Dann steigst du allerdings schon tiefer in der SAP Welt ein.

So richtig programmierst du bei beiden Varianten nicht den RAM. Weil RAM flüchtig und doof ist, kannst du dem schlecht irgendwie eine Logik beibringen, du kannst deine Instruktionen in diesem Speichern damit die CPU diese abarbeitet.
Im Prinzip programmierst du ein Programm welches mit RAM arbeitet. Dieses wird in der Datenbank gespeichert. Wenn du es aufrufst wird es aus dieser gelesen und im RAM ausgeführt, wie jedes andere Programm auch. Der kleine Unterschied ist nur das die SAP Programme auch in der DB speichert. Ein normales Java Programm speicherst du in der Regel bei dir auf der HDD/SSD, von dort wird es in den RAM gelesen. Diesen großen Zeitfresser „Ich warte bis die SSD mir das Programm gibt“ oder „Lese die Daten von der SSD“ entfallen, da es halt in der DB im RAM liegt.

Ich hoffe das es nicht zu kompliziert erklärt ist.

PS: Die CPU Caches habe ich alle raus gelassen, darum ging es nicht! Falls das jemand bemängeln möchte 😉
PS2: ob Column oder Row based kannst du selbst in den Einstellungen der Tabelle definieren.
 
Zuletzt bearbeitet:
benneq schrieb:
Aber grundsätzlich kann man auch in C/C++ nicht "viel" mit dem RAM anstellen: malloc und calloc und free
Bitte vergiss nicht, dass Du insbesondere auch mehr Kontrolle über die Struktur der Daten hast und beispielsweise beim Anlegen eines Array weißt, dass diese Daten im Stack oder Heap liegen und in einer Reihe angeordnet sind.

benneq schrieb:
Und wenn man dann merkt, dass man noch 5% mehr Performance und Kontrolle braucht, kann man seinen Code immer noch zu C oder C++ oder ASM portieren.
Der Performanceunterschied zwischen - um zwei Beispiele zu nennen - C und Java ist in typischen HPC-Anwendungen bedeutend größer als nur 5%.
 
  • Gefällt mir
Reaktionen: ZuseZ3
Zurück
Oben