Autor Zpráva
Jozin
Profil
Zdravím,

Ať dělám jakoukoli aplikaci v PHP jsem zvyklý připojovat se k nějaké databázi. Někdy ale databáze použít nelze. Není podporována, nebo hold chceme jen miniaturní aplikaci, která se nebude vyvýjet a bude v ní minimum dat. Taková se právě teď naskytla mně.

Je to aplikace pro svatbu a jde tam jen o odškrtávání věcí, kdo a co jim koupí. Ten co mi to zadal mi řekl, že databázi nechce, že je to zbytečné a ani nechce uživatele...

Přemýšlel jsem tedy nad tím, jak to udělat. Uchovávat data v čitelné podobě se mi nelíbila a tak jsem udělal třídu Record, který obsahuje data jednoho řádku a pak Registry, který se stará o všechny Recordy, které vytvoří. Registry poté serializuji a ukládám do souboru. To znamená, že je to binární soubor.

Můj dotaz zní: Myslíte, že je to dobré řešení?

P.S.: Sám jsem přišel na nedostatek, který má i obyčejné ukládání do souboru. A to je, jak vyřešit problém dvou lidí, co ve stejnou dobu upravují data. Napadlo mě udělat takový lock, ale myslím, že to už jen zbytečně komplikuji.

Předem děkuji za reakce, Jozin.
Alphard
Profil
Důležitou věc jste zmínil v PS. Aplikace by především neměla být zranitelná, lze to snadno řešit třeba pomocí Nette\Utils\SafeStream, ovšem použil bych framework.

Jestli jsou data v čitelné podobě je podle mě jedno, z webu lze k souboru zakázat přistup, hesla se hashují i v databázi.
Obecně pro vámi popsanou situaci nemám moc pochopení. Jestli má být aplikace skutečně malá, použil bych SQLite.
Ta serializace je docela použitelné řešení za předpokladu, že data budou tak malá, aby se mohla celá načítat do paměti. Konkrétní provedení, jestli serializujete objekty, nebo jen data v poli záleží na aplikaci. Rozmyslete se, jestli opravdu nebudete potřebovat třídit, filtrovat, vyhledávat v datech apod., nebo zákazníka připravte na to, že pro něj píšete databázi :-)
Jozin
Profil
Alphard:
Děkuji za odpověď. Jedná se o jednorázovou aplikaci s pár daty: asi tak 50-60 předmětů. SQLite jsem nabízel a byla mi zavrhnuta. Opravdu nebude potřeba třídi, filtrovat ani hledat v datech... vždy se jen všechny pročtou a již vybrané "zšednou" (zneaktivní se)... a tak po každém načtení... Jinak na SafeStream kouknu. Ještě jednou díky.
Alphard
Profil
Pro více informací hledejte atomicita operací, resp. anglický ekvivalent. http://php.vrana.cz/atomicita-operaci.php nebo funkce flock().

SQLite jsem nabízel a byla mi zavrhnuta.
Asi bych zvážil, jestli takovou zakázku akceptovat :-)
joe
Profil
Můj příspěvek bude asi trochu mimo, ale důležité už napsal Alphard.

Jozin:
SQLite jsem nabízel a byla mi zavrhnuta.
To nechápu - zadavatel ani nemusí vědět, jak to funguje (mechanismus ukládání) a nevím k čemu mu bude, když to bude ukládáno do souborů a ne do nějaké databáze. Akorát si přiděláváš práci. Myslím, že by to zadavatel mohl mít s databází i levnější :-)
okolojdouci
Profil *
OT: já to pořád nechápu. Byly doby, kdy použití databáze ovlivňovalo cenu hostingu. To už je myslím pryč. Jiný argument proti použití databáze neznám. Proč vymýšlet nějakou náhradu databáze, když můžeš použít databázi? Že jde o "moc malou" aplikaci a databáze by byla "moc sofistikovaným řešením"? Je nějaká file-based náhrada databáze jednodušším řešením, než databáze?

Ještě mě napadá jeden pseudoargument - cenová politika. Nabízet "levné non-database weby" a potom "weby využívající databáze" za dvojnásobný peníz. To mi ale připadá jako poměrně krátkozraká komedie na zákazníka, zvlášť za situace, kdy to "levné řešení" jen přidělává práci.
Jozin
Profil
Alphard:
Ještě jednou děkuji.

joe:
Zadavatel je známý, takže to není placená zakázka

okolojdouci:
K vysvětlení proč asi nejsem dobrá osoba. To by ten známý musel s vámi pokecat. Já jen dělám, jak to chtěl.

Všem děkuji za reakce.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0