Korištenje "RAM-a" (permanent varijabli) na serveru

Nespretno je napisan naslov…iz razloga što sam čuo za jednu opciju a nemam pojma kak da se izrazim da izguglam istu.

Naime, radi se o mogućnosti da se na serveru pohrane neke vrijednosti u varijable…te da te varijable budu zapamćene valjda dok god se ne restarta server…pitanje je, kako ih definirati?

Prvo moras nam reci dali se radi o windows ili linux serveru, a drugo o programskom jeziku u kojem radis :slight_smile: Sve u svemu … bilo da se radi o php-u, asp.net-u ili necemu drugome … nebitno dali je lin ili win … sve varijable na strani servera (session i sl.) se spremaju u tmp/temporary datoteke fizicki na disku. Mislim da nema pravog nacina da se te vrijednosti sacuvaju buduci da postoji automatiziran sustav za ciscenje tmp/temporry direktorija … i puno servisa moze na to utjecati … a tu je i naravno exp. time sessiona ako bas njih koristis.

Puno bolja i puzdanija varijanta je koristenje baze, buduci da je ona dovoljno brza za bilo sto … naravno ako je pravilno optimizirana na strani servera a i od strane developera (indexi, primari key-evi, pametni join-i unutar query-a i dr.).

Ono sto ostaje na kraju su recimo plain txt datoteke u kojima se moze zapisati nesto pa cuvati … no to je relativno sporo.

To je ovako na brzinu iz tvog pitanja … postavi detaljniji upit … pa cemo vidjeti.

Vjerojatno misli na ROM-Bios ali meni nije jasno sta ce vam to.

Kao što in4hr kaže, eventualno možeš varijable (rezultate) spremati u bazu ili u txt file u krajnjem slučaju.
U biti, sad se sjetih, u ASP-u postoji “Application” objekt (to je najbliže onome što pitaš), gdje svi posjetioci stranice (aplikacije) dijele istu varijablu (li set varijabli). Sjećam se jer sam davnih dana radio chat u ASP-u i koristio upravo taj objekt.
Za PHP nisam siguran, nisam imao potrebu za time pa nisam niti istraživao (sve što mi treba spremam u bazu).

@dmitrecic Neznam za ASP, al za asp.net i .NET opcenito … postoje system varijable koje mozes dodjeiti u aplikaciji … doduse nista od tog se ne sprema u RAM-u … vec na disk-u … al to je ista stvar kao i sessioni … dok se datoteka ne pobrise rucno, automatski od sustava ili od neke druge aplikacije … ili dok se racunalo ne reboota … file sa “sessionom” je tu … no to je nesigurno … i neznam zasto bi to koristio uopce. Ako ti treba brza i light baza … koristi SQLite.

1 Like

za PHP ti postoje define(“ime”, $var); … to su ti konstante … dakle fiksne varijable … al to je ista stvar kao i session, dakle zapisuje se u tmp file.

mozda bi bilo puno jasnije da nam @bozoou kaze sto ce mu to :slight_smile:

1 Like

Točno, slažem se sa tobom. Sam velim “najbliže tome što traži” je taj objekt.
Čuvanje varijabli u RAM-u (odnosno dok se server ne restarta) po meni baš i nema neke logike ili prednosti (i nesigurno je kao što kažeš).
Daleko bolja varijanta je spremanje varijabli u bazu ukoliko je to potrebno.

Ne vidim opcenito zasto bi se ista spremalo na disk fizicki ili u “RAM”. Glupo, nesigurno i nepotrebno. Ima x brzih i pouzdanih bazi podataka.

Nemam pojma, sad bu nam pokretač teme rekel zakaj… :slight_smile:

Iskonstruirali ste veliku pricu iz nicega. Ja bi prvo pretpostavio da prica o shell ili environment varijabli, a ne varijabli neke aplikacije pisane u XYZ jeziku.

Onda mu daj rješenje, prijedlog ili primjer ako pretpostavljaš da je riječ o shellu.

@leffe Potpuno krivo. Environment ili shell variable su variable koje vec sadrze podatke o necemu (hostname, bash version, path, term i dr.) dakle u njima se ne moze nista zapisivati niti ih spremati, vec se iz njih cita/saznaju informacije o serveru, procesima i drugim stvarima unutar okruzenja OS-a.

Cekaj, ti se bavis programiranjem aplikacija za web, i pises da ne mozes nesto zapisat u varijablu? Recimo path, ne mozes prominit path varijablu do recimo git klijenta na svom serveru? Ne mozes direktno u CLI napisat vrijednost neke varijable?
“Potpuno krivo” kazes. Oke, ne tribamo vise diskutirat.

@dmitrecic pitanje je preopcenito; ako OPa zanima odgovor, sigurno ce se opet javit i obrazlozit sta ga zanima.

Ne, ti si krivo razumio. Environment variable bile u OS-u, nekakvim frameworcima i sl. nisu najenjene za ono sto korisnik vjerovatno pita, a to je zapisivanje neceg novog sto zapravo nema mjesto u enviromentu. Dakako da se Envirnment varijable mogu mijenjati … zasto nebi mogle, al ponavljam to nije ono sto korisnik tu zeli, barem po mojem misljenju. Smatram da korisnik pita nacin kako da nesto zapise brzo bez pretjeranog kodiranja i upotrebe baze, a to je neprakticno i pomalo glupo. @bozoou Pojasni nam sto zelis, pa budes dobio adekvatan odgovor. Ova tema je preopsirna za raspravu bez pravih cinjenica.

Ne znam kako zakljucujes sto zeli. Recimo dodavanje IP adrese u IP tables direktno (ie zelis banat nekakav IP koji te iz nekog razloga trenutno nervira) ce po defaultu vrijedit do restarta servera. Ne kazem da je to ono sto OP zeli, ali postoji toliko toga oko cega mozes petljat po serveru, da mi nije jasno kako si ti zakljucio da on zeli spremit nekakve podatke/content koji bi trebali biti u bazi.
Ne znam, mozda i zeli. Ali ako je ideja da se pamti do restarta, onda rjesenje sigurno nije baza.

Mislim da ovo za što sam ja čuo, da se radilo baš o RAM memoriji…i da je poanta bila upravo u velikoj brzini dohvaćanja i praktičnosti.
Vrsta podatka može biti i takva da se sprema u bazu…ali u tom slučaju se naravno prvo provjeri postoji li trenutno podatak u RAM-u, a ukoliko ga nema, restora se iz baze…a kasnije mu se pristupa kroz RAM. (To je za slučaj kad je bitan brži pristup nekom podatku)

Tako da ne vidim što bi tu bilo glupo i nesigurno…ali ja zaista nemam pojma kad sam čuo za ovo, dali se odnosilo na php ili neki drugi server jezik…(ja tražim sad za php)

E sad, meni konkretno i nije do brzine …nego mi je nekad baš glupo zapisivat neke podatke u bazu. Baza ima jelte stupce i redove…a nisu baš svi podaci primjereni za takvu organizaciju. Što će mi stupci i redovi kad uleti neki podatak koji zahtjeva samo jedan red i samo jedan stupac…vrlo je jasno da je baza tu onda suvišna.
Rekoh sam sebi…kad sam već čuo da ovo postoji…da konačno i prihvatim u upotrebu.

Znači, meni je nebitno jel taj podatak uistinu zapisan u RAM ili na HARD …nego dajem na važnosti jednostavnost korištenja.

Sessioni dobro opisuju ono što tražim…samo ja trebam varijablu koja je vezana uz global, a ne uz session nekog korisnika, kao što to session radi…ukoliko tu nisam nešto propustio oko razumjevanja sessiona.

Zapisivati podatak u file.txt mi je preprimitivno, ukoliko postoji ovakva predviđena metoda za definiranje varijable na strani servera…koja neće nestati završetkom rada neke skripte.php.
Nadam se da je jasno da je i meni jasno da ovo što tražim ne daje nikakvu garanciju hoće li ta varijabla trajati dva dana ili 30 dana …i da je sasvim jasno onda da se tom djelu onda pristupa adekvatno ovisno o potrebi u kojoj bi se primjenjivala ova mogućnost.

A ja konkretno ne pitam iz razloga neke točno određene primjene…samo želim biti upoznat s mogučnosću, s gradivom …

Ono sto tebi treba je cachiranje podataka, a to se zapisuje u disk, nikakav RAM. Instaliraj na serveru nekakav caching software ili ga odradi rucno za svoju specificnu namjenu. Pozeljno je da imas SSD disk na serveru kako bi to sve puno brze radilo. Inace baze nikako nije glupa … pa cak i ako imas samo 1 record unutra … al sve ovisi koliko korisnika imas, kakvu aplikaciju i sl. Preporucam da sve preko baze radis, jer ako projekt naraste na vise desetaka, stotina ili tisuca korisnika … budes imao velike probleme sa sajtom/portalom i svime drugime … zato je bolje od pocetka raditi “by the book” sigurno i optimizirano.

Stalni cache (izmedju vise izvrsavanja skripte) ima smisla samo ako je podatak koji zelis spremiti rezultat nekog kompliciranog upita na bazu ili podatka koji si primio sa vanjskog API-ja a nije potrebno da uvijek bude real-time.

Spremanje varijabli u RAM se koristi samo ako se istom podatku (koji si dobio iz baze nekim upitom) treba pristupiti vise puta tijekom jednog izvrsavanja skripte.

Buduci je u pitanju PHP, tako nesto je moguce napraviti sa PHP-CPP-om.
Kod se pise u c++ i dobije se kompajlirana PHP extenzija.
Koristeci globalne c++ varijable mozes postici tako nesto:
“This difference is especially important if you use global C++ variables. Such global variables are initialized when the extension is loaded - and not at the beginning of each pageview. Changes that you make to global variables keep their value, and subsequent requests will therefore see the updated values.”