PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR als MySQL-Server?



Jaecko
04.12.2008, 07:37
Moin.

Es gibt ja schon einige Projekte, in denen ein AVR als normaler HTTP-Server arbeitet und z.B. per SD-Karte eine Webseite zur Verfügung stellt.

Kennt jemand so ein Projekt, in dem der AVR die Funktion eines MySQL-Servers übernimmt? Also Datenbanken auf ner SD-Karte speichern, mit PHPMyAdmin verwalten und dann von "irgendwo" auf Port 3306 zugreifen und die Daten holen?

Wäre auf Dauer stromsparender als ein direkter Rechner, der nix anderes zu tun hat, als nur die Datenbank zur Verfüfung zu stellen.

mfG

Lemonsquash
04.12.2008, 11:24
Hi Jaecko,

ich fürchte fast, dass ein Datenbankserver etwas zu viel ist für nen normalen AVR. Vieleicht mit nem ARM (von Atmel oder sonstwem). Auf jeden Fall behaupte ich jetzt hier in die Runde rein, dass Datenbankserver UND Webserver Und PHP (phpMyAdmin) für nen AVR sicher zuviel ist.

Als Alternative kann ich dir aber folgendes Vorschlagen:

1.) Ein Rechner, der dauerhaft läuft und mit VMWare Server mehrere andere Rechner (MySQL, Webserver, Fileserver, Printserver, Mailserver was dir sonst noch so einfällt) virtualisiert...

2.) Ein Alixboard zum Beispiel das Alix2c1. Genauere Infos direkt beim Hersteller: http://www.pcengines.ch/alix.htm

Ich verwende so ein Alix board übrigens als Router mit IPCop drauf, funktioniert super...

Mfg.
Lemon

gimme1302
04.12.2008, 13:21
Eventuell kannst du dir auch einen einfachen DSL - Router besorgen und openWrt o.ä. drauf installieren.

Als Speicher könntest du dann ggf einen USB Stick nutzen (müsste eingentlich funktionieren)

pyr0skull
04.12.2008, 14:22
Ein normaler AVR scheitert allein schon am Arbeitsspeicher.. Und die Performance wäre wohl auch nicht tragbar.

H6C12O6
04.12.2008, 15:38
schau mal hier

www.ulrichradig.de

edit: geht! schau mal unter avr , da sind 2 webserver beschrieben

Vitis
04.12.2008, 15:44
n PHP Parser auf AVR ... hmmm ... nicht unmöglich
aber kaum realistisch.
Wenn dann müsstest Du den quasi zu Fuß proggen
und das wär schon ne ziemlich heftige Geschichte.
Das liefe dann in etwa auf nen Apache Server hinaus,
ohne OS, nicht wirklich.
Such mal nach dem kleinst möglichen System für n
Linux OS, dann haste vermutlich Dein System.
ARM9 oder AVR32 halte ich für realistisch.

Jaecko
04.12.2008, 15:53
Thx für die Anregungen/Hinweise.
Also so wie's aussieht, wirds mit dem AVR wohl nichts. Diese Alix schauen so aufs erste nicht schlecht aus. Mal umsehen, wo's die so gibt.

HTTP/PHP muss hier garnicht sein, das kann alles extern ablaufen (bzw. läuft auch extern ab). Es würde nur um die reine Datenbankverwaltung gehen.

Per VMWare wärs zwar machbar, aber das löst das eigentliche "Problem" nicht, dass ja dazu kein "grosser" PC mehr verwendet werden soll.

Vitis
04.12.2008, 19:09
Bei der Datenbankverwaltung geht es ja gerade
um die Benutzeroberfläche. Ne MySQL Datenbank
hat die nämlich direkt nicht, dafür gibts dann
phpMyAdmin und das ist eben PHP-Script.
php Files sind im Prinzip HTML Files mit
eingebetteten php Scripten, die beim Aufruf der
Datei interpretiert werden. Natürlich serverseitig.
Daher brauchts nen Webserver, z.B. Apache
der das dann erkennt und dem php Parser zuschiebt.
Je nach Servereinstellungen können Dateiendungen
für php-files sein:
.php
.php3
.php4
.phtml
.phtm
manchmal auch
.htm
.html
aber das macht man nicht so gern, weil dann auch
normale websites immer durch den Parser laufen, was
den Server dann mehr belastet.

ne normale php Seite ist in etwa so aufgebaut:
<html>
<head>
<title> xyz </title>
</head>
<body>
<?php
echo 'hallo Welt';
?>
</body>
</html>

Das ist dann ne ganz normale html Seite, nur der Teil zwischen
den php-Tags wird interpretiert. Dort stehen dann auch die
Sachen von der Datenbankanbindung, Datenbankaktionen usw.
drinne.

Hier hab ich mal nen Auszug aus nem Script, bei dem ich per
php n java-script erstelle ...

<script>
// (C) 2000 www.CodeLifter.com
// http://www.codelifter.com
// Free for all users, but leave in this header
// NS4-6,IE4-6
// Fade effect only in IE; degrades gracefully

// =======================================
// set the following variables
// =======================================

// Set slideShowSpeed (milliseconds)
var slideShowSpeed = 3000

// Duration of crossfade (seconds)
var crossFadeDuration = 3

// Specify the image files
var Com = new Array()
var Pic = new Array() // don't touch this
// to add more images, just continue
// the pattern, adding to the array below

<?php

$pfad=$_SERVER['REQUEST_URI'];
//echo $pfad;
$teilpfad = explode("?", $pfad);
$Files=array();
$verz=opendir(".");

while ($Datei=readdir($verz)){
array_push($Files,$Datei);
}

if (is_file("comment.txt") && $Datei= file("comment.txt")){
$Zaehler=0;
foreach ($Datei as $Zeile){
$Zeilegeteilt= explode(";",$Zeile);
//$filename[$Zaehler]=$Zeilegeteilt[0];
$comment[trim($Zeilegeteilt[0])]=trim($Zeilegeteilt[1]);
//$Zaehler++;
}
}
else {
$filename[0]="";
$comment[0]="";
}
sort($Files);
reset($Files);

//if (isset($HTTP_GET_VARS["Slide"])){
$bildzaehler=0;
//print_r($Files);
while(list($index,$Datei) = each($Files)){
if (is_file($Datei)){
$Dateierweiterung=pathinfo($Datei);
$Dateierweiterung=$Dateierweiterung["extension"];
if (strlen($Datei)>3 && $Datei<>"Thumbs.db"){
if ($Dateierweiterung=="jpg" or $Dateierweiterung=="JPG"){
if (is_file("$Datei")){
echo "Pic[$bildzaehler] = 'http://www.weingut-hoerner.de".$teilpfad[0].$Datei."'\r\n";

if (array_key_exists($Datei, $comment)){
echo "Com[$bildzaehler] = '".$comment[$Datei]."
'\r\n";
}
else {
echo "Com[$bildzaehler] = '
'\r\n";
}
$bildzaehler++;
}
}
}
}
}
//}
?>


// =======================================
// do not edit anything below this line
// =======================================

var t
var j = 0
var p = Pic.length

var preLoad = new Array()
for (i = 0; i < p; i++){
preLoad[i] = new Image()
preLoad[i].src = Pic[i]
}

function runSlideShow(){
if (document.all){
document.images.SlideShow.style.filter="blendTrans(duration=2)"
document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)"
document.images.SlideShow.filters.blendTrans.Apply ()
}
document.images.SlideShow.src = preLoad[j].src
document.getElementById('comment').innerHTML = Com[j]
//document.getElementById('comment').text=Com[j]
if (document.all){
document.images.SlideShow.filters.blendTrans.Play( )
}
j = j + 1
if (j > (p-1)) j=0
t = setTimeout('runSlideShow()', slideShowSpeed)
}
</script>

das könnte im prinzip auch in C oder Bascom funktionieren
mit etwas umbau versteht sich.

Was Du auf nem AVR machen kannst wär ne
Clientseitige verarbeitung z.B. per Java-Script.
Oder Java Applet. Sprich Du schickst Deinen gesamten
Datenbestand, der auch z.B. in ner csv-Datei liegt
mit Rüber zum Client, der führt dann die gewünschten
Operationen durch und schickt die neue Datenbank
als csv an den Server zurück, der sie dann wieder
auf der SD-Karte speichert ... der Haken ist nur, dass
Quasi immer nur ein Client das machen kann.
Und es gibt halt etwas mehr Traffic.
Und natürlich ist der gesamte Datenbestand für den
Client ersichtlich.

Jaecko
04.12.2008, 19:33
Also den Aufbau mit PHP & Co kenn ich schon.
Zur Zeit ist es so,dass ein Server A die ganze Oberfläche bietet, also Webseite, PHP etc. Server B (der, der ausgetauscht werden soll) beinhaltet nur die Datenbank und ist auch nur über Port 3306 erreichbar. Fällt der aus, läuft zumindest die Webseite noch und alle php-Daten, die keinen Datenbankzugriff brauchen.
Die .php greifen also nicht kalssisch per "localhost" drauf zu.

aber das mit dem eigenen "Protokoll" wär wohl das einfachste. Geändert sind die phps ja gleich.

Vitis
04.12.2008, 21:55
ach so, jetzt versteh ich ... praktisch
den AVR als Fileserver nutzen ...
ja, das könnte gehen.
Kommt halt auch auf die Datenmenge an.
bei $_POST auf den AVR weiß ich nicht
bescheid, da muss ich passen.
Über Get kleine Datenpakete im x Byte Bereich
könnte man vermutlich zusammenstricken
aber x Kilobyte, da wirds RAMmäßig halt eng.

thewulf00
06.12.2008, 20:17
Also:

@Vitis: Vielen Dank für Deine wirklich unnötige Erklärung zum Thema PHP.

@Jaecko: Einen MySQL-Server auf einem Atmel wäre sicher kein Problem - von der reinen Programmierung. Allerdings wäre die Einschränkung dann die Geschwindigkeit - sprich Performance.
Wenn Du keine zeitkritischen Anwendungen planst, dann spricht nichts dagegen - Im Gegenteil: Es wäre soger sehr clever.
Allerdings wäre das die erste MySQL-Implementation auf einem AVR weltweit :-)

dennisstrehl
06.12.2008, 21:39
Das Problem ist halt, du musst den MySQL-Server selber programmieren. Das, was es auf dev.mysql.com als Quellcode gibt passt nie und nimmer in einen AVR. Das heißt, du wirst auch die Funktionalität deutlich einschränken müssen. Der Programmieraufwand wird dann bestimmt nicht zu unterschätzen sein...

TheDarkRose
07.12.2008, 09:31
Ich würde dir da wirklich ein ARM-Board mit Linux empfehlen, auf dessen du dann den MySql Server nur mit den benötigsten funktionen und engines rauf kompilierst

gast1234
07.12.2008, 10:17
Schwierigkeiten, die ich sehe:
Der extrem geringe Arbeitsspeicher. Sobald du joinst musst Du die Daten vom Select vorrätig haben, wo sollen die hin, wenn nicht in den RAM?
Du solltest einen halbwegs intelligenten execution plan auf die Bein stellen.
Du hast kein Multithreading, daher hast auch keine Probleme mit Transactions oder Locking und musst nicht Tabellen mehrfach vorrätig haben. Aber Du hast automatisch die damit verbundenen Nachteile. Ignorierst Du Transactionanweisungen in den Queries einfach, kannst Du dich im Falle paralleler Abfragen, die sich auf mehrere Queries erstrecken, auf inkonsistente Daten gefasst machen. Das trifft maßgeblich auf Indexe zu. Damit kannst Du Dir schön Deine DB zerschießen.

Du hast also die Serverkomponente, den query parser, die execution plan factory und die eingentlichen Datentzugriffe in einem AVR zu vereinen. Selbst mit arg abgespeckten Funktionsumfang eine überaus herausfordernde Aufgabe.

Vitis
07.12.2008, 10:36
@thewulf00 ... jaja, Du mich auch ...
mag ja sein, dass Dir das alles wunderbar klar ist,
es soll ja auch Leute geben bei denen ist das nicht so.
Meine Ausführungen hatten den Hintergrund, dass der
Threadersteller phpMyAdmin vorschlug und ich das
eben nicht realistisch sehe dies in nen AVR zu quetschen.
Derlei Anfeindungen kannste bei mikrocontroller.net loswerden, danke.

TheDarkRose
07.12.2008, 16:33
bzgl. phpMyAdmin
pma muss nicht zwingend auf den selben host wie der MySql Server installiert sein. Das kann auch einen ganz anderen maschine rennen. so ist es auch meist bei den hostern. pma rennt auf der maschine mit dem apache wo auch das hosting abläuft und die mysql server rennen auf ganz anderen maschienen

thewulf00
07.12.2008, 18:37
Das war keine Anfeindung, sondern ein Hinweis. Ein Verweis auf Wikipedia oder php.net hätte völlig genügt.

Wir sind uns einig, dass weder Apache noch PMA auf den AVR soll.
In allen anderen Punkten stimme ich gast1234 komplett zu. Es ist für einen Hobbybastler sicher keine lohnenswerte Aufgabe.

Jaecko
07.12.2008, 18:54
Also so wie's aussieht, werd ich den Arbeitsaufwand wohl eher ins finanzielle umlagern und einen dieser Embedded-PCs (ALIX, etc) besorgen.

Wär zwar schon ne Herausforderung, sowas auf nem AVR zu erstellen, nur glaub ich selber auch langsam, dass alle Bemühungen dazu nur Zeitverschwendung wären oder durch irgendwelche "Umleitungen" elendst langsam werden. Ne SD-Karte mit 2GB könnte man ja als "RAM" verwenden... nur von Effizienz/"Speed" reden wir hier mal nicht.

thewulf00
08.12.2008, 11:15
So eine Implementation wäre schon sehr interessant. Vielleicht muss es ja nicht gleich mySQL sein, vielleicht reicht ja auch ein kleineres DBMS, wie z.B. SQLlite.

Dass es nicht sehr sinnvoll ist, haben wir gemerkt, aber aus Bastlersicht mehr als eine arge Herausforderung. Und wie das dann ankommt:
A: "Hier hab ich meinen MySQL-Server."
B: "Wo denn?"
C: "Na hier, unter der Briefmarke..."

:-)

TheDarkRose
08.12.2008, 12:29
SQLlite wäre icher möglich zu realisieren.