Kiedves HUP tagok!
Valószínűleg sok téma nyílt már hasonló kérdésekkel, ha úgy érzitek máshol is választ kapok a kérdésemre jelezzétek.
Csinálni fogok egy weboldalt aminek (tegyük fel) 100.000 tagja van, ebből 1000 lesz aktív állandóan, ő percenként 20-30 leplekérést is indítanak. Lesz még a servernek egy "trackere" ami kéréseket fog kezelni, folyton fut.
A kérdés pedig hogy szerintetek melyik jönne ki jobban árban, egy ezt stabilan kiszolgáló Dell server Win Srv2K8-al IIs7 -net 3.5, vagy egy SUN server a hozzá tartozó jsp serverével. ASP meleltt szól az output caching ami ezen az oldalon sűrűn használva lenne. Viszont egy Javas server talán kevésbé terheli a servert.
Win-re MSSql 2K8 lenne, a java alá pedig mit ajánlotok?
? Server komplett ára
? Előnyök hátrányok
A válaszokat előre is nagyon köszönöm!
- 2922 megtekintés
Hozzászólások
A Java szerver oldali technológiák kicsit szerteágazóbbak, mint pusztán "JSP". Addig ne is gondolkozz szerverben, amíg ezt ki nem találtad. (Ha viszont ki van találva, onnantól kezdve viszont azt is tudod, mi kell hozzá.)
- A hozzászóláshoz be kell jelentkezni
Egyébként 500 req/sec a program minőségétől függően lehet sok és kevés is. Jobban megcsinált webappoknál 1000-2000 req/sec -et számolunk egy rendes velocity, freemarker vagy akármilyen view rétegre (figyelem! csak a view rétegre) _cpu magonként_. Ilyen házi használású Grails alkalmazásnál a GSP-re (ami tkp JSP) mondjuk 500-at. De én nem tudom, én a szerveres ember vagyok, majd valami web kóder megmondja. Csak annyit tudok, hogy rohadt könnyű eltérni negatív irányba.
ASP mellett meg ne szóljon semmilyen output caching, ilyet ugyanis mindenhol lehet csinálni.
- A hozzászóláshoz be kell jelentkezni
Ha egyszer kipóbáltad a java-t (jsp, javabeans, JMS, JNDI), akkor utána már nem nagyon fogsz semmi másban gondolkodni. Iszonyat mit meg nem lehet csinálni a JavaBean-ekkel. És a java technológiával.
Nem hiába használnak enterprise környezetben Java alapú alkalmazásszervereket.
Ajánlom olvasgatásra a Geronimo-t, ami ugyen még nem egy JBoss, de már sokkal több, mint egy Tomcat.
D azt javasom, hogy vagy kötelezd el magad az MS mellett (akkor MSSql, ASP), vagy a Java mellett és akkor viszont megnyílik a világ és azt csinálsz amit akarsz. Az MS jó abban, hogy szépen minden össze van reszelve, de technológiailag (szerintem) messze elmarad a Java-tól és annak lehetőségeitől. Ugyanakkor a Java esetében több reszelésre számíthatsz.
- A hozzászóláshoz be kell jelentkezni
Nem reszelés, finomhangolás. De csak a java esetében.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
A kódot nem én fogom írni, arra keresek egy profit, de amíg nem döntöttem el miben legyen írva addig nem haladok. Cachelés valóban sok mindennel meg lehet oldani ez igaz. Viszont ha jól láttam egy Sun server jóval drágább egy azonos tudású Dell vagy Hp egyéb társakkal szembe. Ez is fontos tényező. Nehéz eldönteni a kettőt egyszerre nézve. Az meg hogy mi minden oldható meg javaban nem lényeg mert maga az oldal csak SQL kéréseket fog végezni, minden mást a "tracker" végez majd.
- A hozzászóláshoz be kell jelentkezni
Nem értem a problémádat... :)
Miért gondolod, hogy a JSP csak Sun szerveren megy? Ugyanúgy fel tudod tenni Dell vagy HP szerverre is a kiválasztott alkalmazás szervert (Glassfish, JBoss, stb).
A JSP és az ASP között kb. annyi a különbség, mint a diktatúra és a demokrácia között. ASP esetén a hardvert leszámítva adott, hogy mit használhatsz és azért elég rendes licencdíjat kell fizetni. A JSP esetén van féltucat kiváló alternatíva, amin futtatni tudod, és egy csomó cache között is tudsz válogatni, nem az az opció, hogy igen, vagy nem.
A tracker milyen nyelven lesz implementálva?
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD
- A hozzászóláshoz be kell jelentkezni
No offence de ha nem te tervezed a programot, akkor miért döntesz el egy olyan - relatíve lényegtelen - dolgot, hogy miben legyen írva? Meg mi köze a szerver típusához.
130 lóerős BMW full supporttal jóval drágább egy 130 lóerős Octaviánál Érdről. (A két autó mindenben ugyanazt nyújtja, de legalábbis a lóerőben biztosan. Érted?) Amúgy nem túl jó dolog, ha egy elmondásod szerint 100000 useres szolgáltatás tervezésénél a fejlesztési és egyéb költségek között egyáltalán számít bármit is az 1 db ilyen vagy 1 db olyan szerver közötti árkülönbség..
- A hozzászóláshoz be kell jelentkezni
Nyilván később nem fog számítani, de amíg nincs bevétel belőle addig nagyonis számít hogy mennyi pénzből kell ezt összehozni. Azért akarom eldönteni hogy milyen nyelven íródjon mert aszerint veszem fel a programozót. Ami gondot okoz hogy a sun nagy mysql támogató, viszont mysqlt nem szívesen tennék a szerverre (amiben rendes boolean sincs). Eddig a java meleltt szól pár érv ami meggyőző is, érdekelne viszont a véleményetek az ASP-ről is. Mint már ítam az ASP által támogatott funkciók bőven elegek a feladatra, ezért főleg a teljesítmény számít. a tracker pedig win alatt C#ban lesz írva, egyéb Os alatt pedig rábízom ezt a programozóra. Trackernek is alkalmas lenne egy Java alkalmazás? itt már maximálisan a sebesség számít, csak matematikai műveleteket végez, és SQL kérés.
- A hozzászóláshoz be kell jelentkezni
Nyilván később nem fog számítani, de amíg nincs bevétel belőle addig nagyonis számít hogy mennyi pénzből kell ezt összehozni.
Akkor addig akárhol elvan az alkalmazás szerver, nem kell rögtön alátolni egy brutál vasat. Pláne, hogy később bele lehet tenni clusterbe, és akkor főleg nincs gond.
a tracker pedig win alatt C#ban lesz írva, egyéb Os alatt pedig rábízom ezt a programozóra. Trackernek is alkalmas lenne egy Java alkalmazás? itt már maximálisan a sebesség számít, csak matematikai műveleteket végez, és SQL kérés.
A C# azonos szinten van a Java-val (mindkettő virtuális gépben fut), semmivel se lesz gyorsabb, se lassabb... :)
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD
- A hozzászóláshoz be kell jelentkezni
Clustert nem akartam mert szerintem 2 gyengébb gép még mindíg drágább mint egy erősebb, de szóljatok ha tévedek. Az emg igaz hogy managed kódban nincs nagy eltérés. Árban mennyit saccoltok a servernek, vagy servereknek (cluster).
- A hozzászóláshoz be kell jelentkezni
Clustert nem akartam mert szerintem 2 gyengébb gép még mindíg drágább mint egy erősebb, de szóljatok ha tévedek. Az emg igaz hogy managed kódban nincs nagy eltérés. Árban mennyit saccoltok a servernek, vagy servereknek (cluster).
Nem feltétlen drágább két kisebb gép clusterben, mint egy nagyobb, amely azonos megbízhatóságot ad... hogy garantálod egy géppel a rendelkezésreállást? :)
Árban attól függ, hogy az első időszakban mekkora terhelést vársz. Mert ha lesz 100.000 felhasználód, akkor lesz annyi bevétel is, hogy megfelelő gépparkot tegyél alájuk. Ha meg nem jön be és 10.000 felhasználód lesz csak, akkor ott fogsz ülni egy tízszeresen túlméretezett gépparkon...
--
http://wiki.javaforum.hu/confluence-2.10/display/FREEBSD
- A hozzászóláshoz be kell jelentkezni
A Googlenel a sok kicsi tobbet er alapon gondlkodnak, es bejott nekik.
"Estimated 450,000 low-cost commodity servers in 2006". Inkabb vettek tobbszazezer sima gepet, mint keves, de high-end cuccot, igy jobban megeri. Hiszen sokkal olcsobb cserelni, ha naponta tonkre is megy parszaz gep.
"A 1,000-fold computer power increase can be had for a 33 times lower cost if you you use a failure-prone infrastructure rather than an infrastructure built on highly reliable components. You must build reliability on top of unreliability for this strategy to work."
- A hozzászóláshoz be kell jelentkezni
Ezt sokan így gondolják és ezért akar mindenki manapság "clustert" üzemeltetni. A probléma a "reliability on top of unreliability" megvalósításában van. Nap mint nap látom, hogy pont a szoftveres implementáció, vagy épp a "reszelés" miatt áll az a "cluster", aminek épp az lenne a lényege, hogy menjen. Szóval kis méretben nem csak hogy ésszerűbb, de olcsóbb is egy rendes vas + support + átgondolt stratégia + nem ész nélküli üzemeltetés. Google méretű dolgokkal jönni egy ilyen problémára nem teljesen reális.
- A hozzászóláshoz be kell jelentkezni
De van BOOLEAN. http://dev.mysql.com/doc/refman/5.1/en/numeric-type-overview.html és pontosan úgy működik, ahogy C{,++,#}-ben is kezeled.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Szerintem először alkalmazz egy system architectet, aki megtervezi neked, hogy pontosan hogyan is álljon össze a rendszer, a komponensei milyen protokollon át kommunikáljanak. Aztán ezután szinte mindegy, milyen programnyelven valósítod meg a rendszertervet, azaz mindegy, milyen programozót alkalmazol. Az architect munkája sokkal fontosabb, mint a programozóé. Az, hogy a SUN nagy MySQL támogató, nem meglepő, övék. Ilyen erővel mondható, hogy a Microsoft nagy MSSQL támogató.
"Trackernek is alkalmas lenne egy Java alkalmazás? itt már maximálisan a sebesség számít, csak matematikai műveleteket végez, és SQL kérés."
Sok esetben a Java gyorsabb, mint egy ekvivalens C++ megvalósítás.
Amúgy szinte mindegy, hogy a .NET és a Java platformok közül melyikben valósítod meg a dolgodat, mindkettőben lehet szar és jó szoftvert is fejleszteni. Viszont nem mindegy, hogy mennyit akarsz erre költeni. A .NEThez, annak érdekében, hogy minden szolgáltatását kihasználd, szükséges szoftverlicenceket fizetned, míg a Java platform alatt sok ingyenes, nyílt forráskódú, szabad szoftver áll rendelkezésedre.
Amúgy az, hogy van caching vagy nincs, az alkalmazandó platformot ne befolyásolja. A weboldatl előállító kódnak nem kell tudnia arról, hogy kimenete cachelődik-e, vagy nem. Így eleinte ne vedd figyeleme a cache létét, és később beépítheted a szofverrendszeredbe a cache kezelést. Java platform alatt is sok alkalmazásszerver tudja ezt beépítve, a progamok számára átlátszatlan módon.
- A hozzászóláshoz be kell jelentkezni
_Franko_ és Persicsb meggyőzött cluster terén. köszönöm a segítséget.
Jason a MySqlben a booleant nem lehet Variable = !Variable módon váltani. Mellesleg amikor feltöltöttem egy boolt azt smallintkéne kezelte(ha jól emlékszem, de semmiképp se boolként). system architect emberkéket hol találok? itt nézelődjek?
Köszönöm az eddigi válaszokat, hasznosak voltak.
- A hozzászóláshoz be kell jelentkezni
Tinyint-kent kezeli, es de, lehet.
mysql> SELECT 'a' != 'b';
+------------+
| 'a' != 'b' |
+------------+
| 1 |
+------------+
Altalaban amugy a adatbaziskezelo retegek ezt el szokjak rejteni. Amugy meg, altalaban a programozok meg szoktak ezt a problemat oldani. Mivel ugyse te leszel a programozo, nem feltelten neked kell aggodni emiatt - foleg, hogy nem is ismered a cuccot.
A masik: eloszor is, legyenek meg neked a terveid: pontosan miket szeretnel, miben gondolkodsz. Addig ne keress architekt-et, mert ezt o sem fogja kitalalni helyetted, o neki kell egy hatarozott cel.
Talalni embereket itt az Allast kinal forumban, vagy valamely allaskereso portalon talalhatsz.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Azért nem tetszik a my mert ezt szerintem egy valamirevaló sql 1 bitnyi helyen is el tudná tárolni. Amúgy php programozó vagyok ismerem a mysql-t sokat használom. A terveim megvannak, összeírtam mi kell hozzá, de a pénz még csak részében, így van kis idő kezdésig. Nagyon köszönöm a válaszokat, hasznosak voltak, valószínűleg java alapú lesz, és eszerint keresek embereket. mégegyszer köszönet mindenért.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy el tudna tarolni 1 biten (igy is 1 biten tarolja, mert vagy 0, vagy 1 az ertek), de akkor is ugyanekkora helyet foglalna neki, mert a gepi szonal kisebb erteket foglalni tobbe kerul, mint gepi szo meretnyit foglalni.
- A hozzászóláshoz be kell jelentkezni
Arra értettem, hogy tinyintként tárolja, emiatt a boolnak (ami 0 v 1) lefoglal 256 bitnyi helyet, ami pont 128szorosa annak amennyit ténylegesen foglalnia kellene. Nem probléma de ilyen apróságok miatt elbizonytalanít :(
- A hozzászóláshoz be kell jelentkezni
A tinyint 1 byte. Azaz 8 bit. Miert mondod, hogy 256 bitet foglal le?
- A hozzászóláshoz be kell jelentkezni
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
Itt írja de lehet rosszul értettem, felületes a tudásom. ez egy másik téma, ha te mondod elhiszem, szerintem többet használod mint én.
- A hozzászóláshoz be kell jelentkezni
A tablazat elso hasznos sora: "TINYINT 1". Azaz ennyi byte. Hol irja a 256 bitet?
- A hozzászóláshoz be kell jelentkezni
biztosan a halmaz elemszamara ertette, amit lefed :) csak benezte es bitet irt :)
---
"A legjobb dolgok az életben nem dolgok."
- A hozzászóláshoz be kell jelentkezni
Elképzelhető és elnézést a hülyeségekért.
- A hozzászóláshoz be kell jelentkezni
ha nem te irod, mi kozod van ehez?
semmit nem utalok jobban, mint amikor a hozzanemerto megrendelo belepofaz a dolgomba (architectkent). had dontsem mar el en, hogy mikor mit hasznalunk, es epp miert..
te adod a penzt, o a tudast. ha Neked meg lenne a tudasod, Te irnad, gondolom.
- A hozzászóláshoz be kell jelentkezni
röviden: bikeshed
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Ha nincs penzed hasznalj Postgres-t, nem lesz gondod az sql kompatibilitassal, es ha majd megy az uzlet konnyebb atallni Oracle-ra. Bar ismerek egy ket kozepes ceget, amik postgres hasznalanak eleg nagy terheles alatt.
- A hozzászóláshoz be kell jelentkezni
Huuh, ez a topic már a születésénél off volt.
- A hozzászóláshoz be kell jelentkezni
Azért nem árt megjegyezni, hogy a normális (bocs, nálam a mysql a játékszer kategória) adatbáziskezelők (pl mssql) is csak akkor tudják optimalizálni a boolean adattipust, ha rekordszinten több van benne. Ha egy rekordban 1 boolean mező van, az pont ugyanúgy 1 byte-ot foglal mint mysql-ben, viszont ha 2,3,4...8 db van, akkor az még mind elfér ugyanabban a byte-ban. 9-16 db között 2 byte-ot foglal stb. Az esetek 99%-ban nem is a helymegtakaritás a lényeg, hanem, ha egy lekérdezésben az összes boolean mező feltételként benne van, akkor brutális a sebességnövekedés, mert egyetlen integer egyenlősséggel ellenőrizhető az összes feltétel. És persze az IO megtakaritás sem lényegtelen nagy adatbázisoknál.
(nem tudom mysql konkrétan hogyan működik ezügyben, lehet, hogy ugyanigy, nem emiatt komolytalan)
- A hozzászóláshoz be kell jelentkezni
Hanem amiatt, mert fingod sincs, hogy mukodik.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
okos vagy leülhetsz :)
ettől a sok konkrétumtól és szakértelemtől elájultak valószinűleg sokan :)
- A hozzászóláshoz be kell jelentkezni
szakmai erveket is fogsz felhozni? :-)
mit tud az mssql, amit a mysql nem? ;-)
tovabba meselhetnel arrol, hogy ha van egy tranzakciom majd elhal alatta a gep, akkor a dirty adatok miert nem replikalodnak nodeok kozott.. ;)
- A hozzászóláshoz be kell jelentkezni
én legalább leirtam pontosan, szakmai érvekkel hogyan működik normális rendszereken a boolean optimalizálás és nem hülyeséggekkel tereltem, hogy milyen ügyes a mysql, hogy tinyintként is tudja kezelni...
Ha mssql gondod van, javaslom nyissál neki topicot, ez nem az, talán majd ott elmagyarázzák neked mik azok a dirty adatok egy transaction rollback esetén.
- A hozzászóláshoz be kell jelentkezni
szoval fingod sincs az egeszhez, es rottyantasz egyet. gz!
plane, hogy rollbackrol szo sincs, lehet, hogy egy erto olvasas orara be kene ulnod vmi kozeli altalanos iskolaba..
- A hozzászóláshoz be kell jelentkezni
"plane, hogy rollbackrol szo sincs"
vs
"elhal alatta a node, akkor nem akarom hogy rollback legyen"
LOL :))
- A hozzászóláshoz be kell jelentkezni
majd ott elmagyarázzák neked mik azok a dirty adatok egy transaction rollback esetén.
erre reagaltam. erto olvasas megint egyes, leulhet. bar nem ertem, dirty adatok miert csak rollback eseten lennenek.. ;-)
ajanljak alapfoku db konyvet is neked?
- A hozzászóláshoz be kell jelentkezni
Hát persze hogy nem érted, ha még csak alapfokú db könyveket láttál :)
Teljesen természetes a rollback egy node halál esetén, mivel sosem tudhatod, hogy a többi node-hoz eljutott-e az utolsó kliens által kiadott művelet mielőtt kihúzták a tápkábelt a node-ból, igy nem garantálható a konzisztencia, csak rollback-kel.
De nyugodtan dobd be ezt hogyan oldja meg a mysql high availability solution-je, mert a mssql az szar :)))
- A hozzászóláshoz be kell jelentkezni
bedobnam, csak az se tudja (AFAIK) :)
ellenben racnal nincs ilyen gond.
- A hozzászóláshoz be kell jelentkezni
Mi a feature neve oracle alatt?
- A hozzászóláshoz be kell jelentkezni
megneztem, elvileg a TAF ez. a doksi alapjan ez sem tamogatja viszont a tranzakcio folytatast, ami kicsit fura, mert en nem igy emlekszem. holnap utanakerdezek pontosan. addig viszont a tobbirol irhatnal vmit, marmint amit lent kerdeztem (mssql vs oracle)
- A hozzászóláshoz be kell jelentkezni
Ez komolyan érdekel. Végigfutottam oracle HA solution leirásokat és egyetlen szó se volt ilyenről. Csakis transactionally consistent átállásokról a node-ok között, ami rollback.
mssql vs oracle-höz nincs sok hozzáfűznivalóm, ezek teljesen egy súlycsoportban játszanak, én mssql-t preferálom általában a projekteknél, de az oracle is korrekt. Mysql viszont szóba sem jöhet komoly projektnél.
- A hozzászóláshoz be kell jelentkezni
Egy újabb kérdésemre is választ kaptam.
- A hozzászóláshoz be kell jelentkezni
dirty adatoknak miert jo ha replikalodik?
Tyrael
- A hozzászóláshoz be kell jelentkezni
mert ha van egy hosszu tranzakciom, es elhal alatta a node, akkor nem akarom hogy rollback legyen, hanem szeretnem folytatni a tranzakciot ugy, hogy a kliens eszre se vegye a nodehalalt.
- A hozzászóláshoz be kell jelentkezni
honnan fogja tudni a szerver a folytataskor hogy melyik klienshez tartozik a felbehagyott tranzakcio?
vagy hiba eseten a failoverbol belepo vason akarod ujrakezdes nelkul folytatni a tranzakciot?
szerintem annyira ritka az ilyen, hogy abban a keves esetben inkabb veszits egy kis futasi idot, mint a ki tudja hol hogyan felbehagyott tranzakcio folytatasabol eredoen esetleg adatvesztes lepjen fel...
Tyrael
- A hozzászóláshoz be kell jelentkezni
oh, nem en talalom ki magamtol az ilyeneket. felmerult ugyfelnel kovetelmenykent.. :)
- A hozzászóláshoz be kell jelentkezni
amugy mivel a tranzakcio imho mindenhol sessionhoz kotott es ha lehal a vas, akkor bomlik a session, ezert szerintem ilyet nem nagyon fogsz tudni csinalni.
de az ilyen feature requesteknel, idezd magadat:
http://hup.hu/node/66584#comment-711008
:)
anno egyik munkahelyemen lebaszott a fonok, hogyha 2 ablakbol (de 1 bongeszobol) nezi az oldalt, akkor nem tud 2 kulonbozo felhasznaloval belepve lenni egyszerre az oldalon.
Tyrael
- A hozzászóláshoz be kell jelentkezni
oke, de aki ezt kerdezte, nem tudatlan ugyfel volt, hanem egy senior developer mashol. le akartak vinni a tranzakciokezelest a middle-tierbol a dbhez, igy megusztak volna a jdbc driver hianyossagait XA teren. mert persze a gfben van distributed transaction support, csak ha a jdbc drivered nem tamogatja...
probakepp most takolunk ossze egy olyan archot, ahol minden sajat (ertsd: sajat db szoftver, sajat alkalmazasszerver szoftver, etc), bar csak demo celokat fog szolgalni :)
mssql fanboyunkat kerdeznem: oracle vs mssql temahoz tud vmit mondani? akarkit kerdeztem, az aron kivul sok okosat nem tudott mondani. mi az, amit tud az egyik, mi az, amit a masik? nem sok kozom volt mssqlhez, csak amennyit adott kerdesek doksival valo megvalaszolasara forditottam, es nem lattam semmit, amit mssql ne tudna (vagy forditva).
szoval? :)
- A hozzászóláshoz be kell jelentkezni
latod-latod, a vegen mindig rabaszas van a (tul?)sok absztakcios layerrel. :)
Tyrael
- A hozzászóláshoz be kell jelentkezni
Közben megnéztem, tényleg nem tudja a mysql a boolean-eket bitszinten optimalizálni, mezőnként elpocsékol 8 byte-ot rá, az egész boolean csak egy alias a tinyint-re.
Szóval tanits még mester, TE értesz hozzá, én nem... :)
- A hozzászóláshoz be kell jelentkezni
Látom, hogy elkel az okításod, így elkezdem az oktatást:
8 bit. (A byte a nagyobb mint a bit. Egy byte 8 bit.)
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Igaz, elirtam.
Esetleg valami témába vágót? Netán egy cáfolatot a mysql röhejes boolean kezelésére?
- A hozzászóláshoz be kell jelentkezni
miert nem latom a boolean-t az msdn-en?
talan a bit-re gondolhattal.
http://msdn.microsoft.com/en-us/library/ms187752.aspx
viszont a bit-et a mysql is supportalja mar egy ideje:
"As of MySQL 5.0.3, a BIT data type is available for storing bit-field values. (Before 5.0.3, MySQL interprets BIT as TINYINT(1).) In MySQL 5.0.3, BIT is supported only for MyISAM. MySQL 5.0.5 extends BIT support to MEMORY, InnoDB, BDB, and NDBCLUSTER. "
szoval nem ertem mi ez a nagy siras...
ja, es hogy miert maradt ki mindket adatbaziskezelobol a boolean tipus?
"The BOOLEAN type is optional (has feature ID T031), which is a bit surprising for such a basic type. However, it seems that endless discussions of how NULL is to be interpreted for a boolean value is holding BOOLEAN from becoming a core type. "
Tyrael
- A hozzászóláshoz be kell jelentkezni
Jézusom b***meg, vitatkoztok itt egy boolean 1byte-ján, mikor a legtöbb komoly adatbázis terrabyte-okra rúg! Ti nem vagytok normálisak!
Osztán meg egyiknél se jöjjön nekem senki az optimalizációval, mert az mssql-nek egy teljes irodaháznyi szerver kell egy kibeba$$ott lekérdezés elvégzéséhez, a mysql meg nem is lenne képes lekérdezni azt az adatot. Röhej!
- A hozzászóláshoz be kell jelentkezni
ezert kell shardolni.
de azert koszi hogy megosztottad ezeket az infokat velunk.
Tyrael
- A hozzászóláshoz be kell jelentkezni
próbáld ki amikor azt a terabyte-os adatbázist lekérdezed mondjuk 6 féle boolean mezőre szűrve, akkor mekkora különbség lesz a sebességben, ha rekordonként egyetlen byte-ot kell egyetlen iffel megvizsgálni vagy 6 byte-ot 6 iffel. Aztán nézd meg a kettőnek az IO költségét, ha van egy százmillió rekordos táblád, mindjárt nem biteken való szarakodásnak fog tűnni. Mondjuk aki mysql-ben akar ekkora adatbázist használni, az úgyis hülye...
- A hozzászóláshoz be kell jelentkezni
100millio sor az meg nem gaz mysql sem.
4 milliard soros logtablaval mar futottam ossze anno, ott picit racionalizalni kellett az akkori rendszert :)
Tyrael
- A hozzászóláshoz be kell jelentkezni
"talan a bit-re gondolhattal."
Teljesen mindegy, hogy hivják, a lényeg, hogy igaz/hamis/ismeretlen háromállapotú mező. A mssql ezt valóban bit szinten végzi, mig a mysql tinyint-ként tárolja, nagyon nem mindegy, a fent már kifejtett okokból.
A mysql bit-je ugyanúgy tinyint-ként viselkedik, ha felveszel 8-at belőle egy táblába az 8 byte-ot fog foglalni és nem tudod őket egyszerre vizsgálni (1 integer feltétellel) mig mssql-en egyetlen byte-ot foglal és 8x gyorsabb a lekérdezése/szűrése.
- A hozzászóláshoz be kell jelentkezni
mint ahogy feljebb irtam mysql is tudja a bit-et.
mint ahogy feljebb is irtam, mar joideje bit a bit, nem pedig tinyint(1).
hogy osszefogja-e a szomszedos biteket byte-ta, es ugy vizsgalja-e mint az mssql, azt nem tudom.
de a 8szoros gyorsulas szerintem csak papiron letezik, fugghet a query-tol, az indexektol, magatol a query plannertol, de valoban nem tunik hulyesegnek. de azert ha mar csak ennyi a kulonbseg akkor visszaszivhatnad a korabbi allitasaidat a mysql nevetseges boolean kezeleserol.
Tyrael
- A hozzászóláshoz be kell jelentkezni
"mint ahogy feljebb is irtam, mar joideje bit a bit, nem pedig tinyint(1)."
A mysql dokumentáció szerint a bit egy alias a tinyint-re.
"hogy osszefogja-e a szomszedos biteket byte-ta, es ugy vizsgalja-e mint az mssql, azt nem tudom."
Próbáld ki, nem fogja össze.
"de azert ha mar csak ennyi a kulonbseg akkor visszaszivhatnad a korabbi allitasaidat a mysql nevetseges boolean kezeleserol."
miért, mi változott? A mysql egy byte-ot pazarol minden bitre (és boolean-re) az mssql meg nem, ennek pedig a már 10x leirt következményei vannak. Pont, nincs mit ezen szépiteni, van akit nem érdekel, van aki nem érti miről van szó, mert csak 1 megás adatbázisokat látott, de a tényeken ez nem változtat. (és mint mondtam, nem emiatt nem jó választás komolyabb projektekhez a mysql, ez csak apróság, felesleges ezen rugózni)
- A hozzászóláshoz be kell jelentkezni
ja, ha nem tudsz olvasni, azzal nem tudok mit kezdeni.
na, de azert meg1szer utoljara, hatha:
BIT[(M)]
A bit-field type. M indicates the number of bits per value, from 1 to 64. The default is 1 if M is omitted.
"As of MySQL 5.0.3, a BIT data type is available for storing bit-field values. (Before 5.0.3, MySQL interprets BIT as TINYINT(1).) In MySQL 5.0.3, BIT is supported only for MyISAM. MySQL 5.0.5 extends BIT support to MEMORY, InnoDB, BDB, and NDBCLUSTER. "
- A hozzászóláshoz be kell jelentkezni
ez mind szép és jó, csak mi köze van a KÜLÖNÁLLÓ boolean tipusú mezők össze(nem)fogásához? Semmi. Remélem nem azt akarod mondani, hogy te majd a hivó kódból fogsz bitmaszkokkal bohóckodni, hogy elérj valami megközelitőleg hasonló funkcionalitást amit a normális adatbáziskezelők out-of-the-box adnak?
- A hozzászóláshoz be kell jelentkezni
milyen boolean? bit tipusrol beszelgetunk
miutan harmadszor is hulyeseget irtal, gondoltam harmadszor is odairom, hogy hulyeseg.
egyik elozo munkahelyemnel volt bitmask-os bohockodas, nem szerettem, kenyelmetlen.
De hogy osszefoglaljuk, hogy szerinted miert jatekszer a mysql, es nem komoly adatbazisszerver:
Ha van egy olyan tablad, amiben van 1-nel tobb bit(1) tipusu mezo, ami alapjan gyakran futtatsz olyan query-t, amiben 1-nel tobb ilyen mezore hivatkozol, akkor az gyorsabb, es kevesebb helyet foglal mssql-en mint mysql-en.
ha csak 1 ilyen oszlopod van, akkor mssql alatt is 1 byteot foglal.
ha meg nem hivatkozol 1-nel tobb oszlopra a keresesben, akkor meg nincs sebessegnovekedes.
en nem erzem ugy, hogy a valo vilagban, egy eles alkalmazas eszlelheto merteku gyorsulast erne el emiatt.
persze ez lehet hogy csak nekem tunik igy.
Tyrael
- A hozzászóláshoz be kell jelentkezni
én meg negyedszer is leirom, hogy még mindig összekevered a dolgokat. A bit=boolean-nel, ha mssql-ről beszélünk és egészen mást jelent mysql alatt. (de ott sem oldja meg a boolean-eknél felvetett problémákat)
"en nem erzem ugy, hogy a valo vilagban, egy eles alkalmazas eszlelheto merteku gyorsulast erne el emiatt."
azon nem tudok segiteni sajnos. Nem véletlen működik igy a komolyabb adatbáziskezelőkben.
- A hozzászóláshoz be kell jelentkezni
Ettol fuggetlen a szalban tobbszor is osszekeverted a dolgokat. Majd holnap olvasd el megint a szalat.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Valami ilyesmi volt az én problémám is, kicsit sebességmániákus vagyok.
- A hozzászóláshoz be kell jelentkezni
Inkább egyik szálat sem folytatom a hozzászólásommal, még a végén megkövez engem is akire épp válaszolnék :)
Szóval, homályos ismereteim alapján, nem elég az adatot eltárolni, azt is el kell tárolni, hogy hol tároltuk el az adatot. Ha egy byte-ot feloszt az adatbázis-kezelő, boolean értékek számára, azt is tudnia kell, hogy melyik bit melyik érték. Tehát amikor valami hivatkozik az egyik booleanra, nem elég az, hogy melyik byte tartalmazza ezt, hanem az is kell, melyik bit ezen a byte-on belül. Többe kerül a lé mint a hús.
--
Keep it simple, stupid.
- A hozzászóláshoz be kell jelentkezni
Rosszul gondolod. Ezt pl az mssql olyan "elképesztő" módon oldotta meg, hogy a mezők sorrendjében tárolja a biteket egymás után a byte-ban, igy pontosan tudja, hogy ha az 5. mezőt keresi ami boolean, akkor az az egyetlen letárolt byte 5. bitje lesz és nincs szükség arra, hogy leirja mégegyszer, hogy melyik bit melyik mezőt tárolja.
- A hozzászóláshoz be kell jelentkezni
Jogos. Változásnál meg gondolom csúsztatja őket, vagy megjegyzi és kevésbé terhelt időszakban elvégzi.
Egymillió rekordnál a különbség nincs 1 megabyte. És 1 bitnek kell félremennie ahhoz, hogy az egész káoszba dőljön. Nyilván kicsi rá az esély, de címzés nélkül, ilyen kicsi erőforrás spórolás értelmetlennek tűnik számomra. Valamint ennél sokkal-sokkal komolyabb problémáival, kompromisszumaival és tulajdonságaival foglalkozhatna a kedves topic indító az adatbázis-kezelőknek.
--
Keep it simple, stupid.
- A hozzászóláshoz be kell jelentkezni
"Egymillió rekordnál a különbség nincs 1 megabyte. "
Az a baj, hogy az adatbázis lekérdezések nagyon nem szekvenciális olvasásból állnak. És persze, csak akkor 1 mb, ha egyetlen boolean mező van a táblában. De ha 16, akkor már nagyobb a különbség. A lekérdezés sebességében pedig nagyságrendes különbségek lehetnek.
"Változásnál meg gondolom csúsztatja őket"
Ezt nem értem. Miért kéne csúsztatni? Ha az egyik mező megváltozik, akkor azt ah egy bitet átirja a byte-ban és kész.
"És 1 bitnek kell félremennie ahhoz, hogy az egész káoszba dőljön"
Ha bitek/byte-ok csak úgy "félrecsúsznak" egy adatbáziskezelőben, az már régen rossz... De nincs is mi félrecsússzon, csak ha a tábla sémája is megváltozik, de akkor úgyis át kell irni az egészet.
"Valamint ennél sokkal-sokkal komolyabb problémáival, kompromisszumaival és tulajdonságaival foglalkozhatna a kedves topic indító az adatbázis-kezelőknek. "
Na ezzal egyetértek. Ha mysql-t választ egy komolyabb projekthez, akkor a legkissebb gondja a boolean-ek primitiv kezelése lesz...
- A hozzászóláshoz be kell jelentkezni
hat, ha a legnagyobb problema, amit ki tudtal emelni a mysql-bol az ez volt, akkor azert csak nincs akkora baj. :)
termeszetesen sem a google, sem a wikipedia, sem a facebook nem ert ahhoz, amit csinal.
Tyrael
- A hozzászóláshoz be kell jelentkezni
"termeszetesen sem a google, sem a wikipedia, sem a facebook nem ert ahhoz, amit csinal."
Jaj, ezek a cégek/szolgáltatások mysql-el való reklámozása pont olyan röhejes mint amikor a tv-ben a citroen a berlingo-t a rally vb cimeivel hirdeti... :))
Elképzelem ahogy egy google lekérdezés egy 10 terabyte-os mysql adatbázis clusterbe fut bele, ROTFL :)))
Ezek teljesen speciális alkalmazások, ahol részterületeken teljesen egyedi megoldásokra használnak mysql-t, az ég világon semmi köze az átlagos mysql felhasználáshoz, butaság ezekkel példálózni.
- A hozzászóláshoz be kell jelentkezni
google valoban egyreszt szenne patchelt mysql-t futtat, masreszt a soksok terrabyte-os adatbanyaszathoz megvan a sajat (bigtable talan a neve) adatbazisa, viszont a wikipedia ha jol emlekszem kb. vanila mysql-lel megy, aztan facebook ugyan nagy mysql contribute-or tehat o is peccselget, de ott van meg a flickr meg a youtube, ha meg nagy site-okat kell mondani.
imho webre az ilyen "lightweight" adatbaziskezeloke a jovo.
Tyrael
- A hozzászóláshoz be kell jelentkezni
++++
- A hozzászóláshoz be kell jelentkezni
,,Az a baj, hogy az adatbázis lekérdezések nagyon nem szekvenciális olvasásból állnak. És persze, csak akkor 1 mb, ha egyetlen boolean mező van a táblában. De ha 16, akkor már nagyobb a különbség. A lekérdezés sebességében pedig nagyságrendes különbségek lehetnek.''
Értem én, hogy be smart, meg amellett is vagyok. Van, hogy több terás adatbázis-sal dolgozom, de valahogy nem tudom átérezni ezt az 1 bit vagy 1 byte dolgot (sebesség tekintetében sem). Aztán fene tudja, lehet hamar tudnék olyan helyzetbe kerülni, hogy áldanám azt a bites megoldást. Cselesek ezek a lekérdezések.
,,Ezt nem értem. Miért kéne csúsztatni? Ha az egyik mező megváltozik, akkor azt ah egy bitet átirja a byte-ban és kész.''
Például, törölsz egy rekordot. Akkor a sorrend változik (pl a 9-dik boolean a 8-dik lesz), minden utánalévőt egyel visszább kell mozgatni. Nyilván ez nem lehet kihívás egy rendszernek sem, csak megemlítettem.
,,Ha bitek/byte-ok csak úgy "félrecsúsznak" egy adatbáziskezelőben, az már régen rossz...''
Az tuti :)
,,Na ezzal egyetértek. Ha mysql-t választ egy komolyabb projekthez, akkor a legkissebb gondja a boolean-ek primitiv kezelése lesz...''
Nem olyan rossz az a MySQL :)
--
Keep it simple, stupid.
- A hozzászóláshoz be kell jelentkezni
"Például, törölsz egy rekordot. Akkor a sorrend változik (pl a 9-dik boolean a 8-dik lesz)"
Szerintem keversz valamit. Az az egy byte (mondjuk 8 bit mező esetén) minden egyes rekord végén ott van. Nem központi helyen tárolódik, hanem a rekord többi adata mellett. Ha kitörölsz egy rekordot, akkor törlődik az egész byte, nincs mi félrecsússzon.
- A hozzászóláshoz be kell jelentkezni
Áh értem. Igen kevertem, azt hittem ezeket a byteokat globálisan rendeli a táblához. Úgy gondoltam, hogy ha mondjuk rekordonként két boolean van, akkor 4 rekord booleanjat tárolja 1 byteban. Így már sokkal értelmesebben hangzik.
--
Keep it simple, stupid.
- A hozzászóláshoz be kell jelentkezni
tehat nem tudsz 1 byte-nal kissebbet foglalni?
mekkora pazarlas, raadasul redundans is! :)
Tyrael
- A hozzászóláshoz be kell jelentkezni
ha eddig nem értetted meg, ezután se fogod...
- A hozzászóláshoz be kell jelentkezni
hat vegulis megfutamodni a legegyszerubb.
nehogy mar beismerd hogy ha egy picit is jobban ismerned a mysql-t, akkor 100szorta nagyobb hibakat/hianyossagokat is fel tudnal sorolni...
Tyrael
- A hozzászóláshoz be kell jelentkezni
Ja, hogy te itt leragadtál. Olvasd vissza a thread-et, eszemben sincs a mysql hiányosságait sorolgatni, ezerszer ki lett vesézve a téma. Valaki bedobta a boolean dolgat én meg egy kicsit megvilágitottam technikai oldalról, hogy hogyan működik ill. hogyan kéne működnie.
- A hozzászóláshoz be kell jelentkezni
Ez a diszkurzus alulról konvergál a a -oo -hez, ott ahol a függőleges tengelyre a "értelmi szint"<->"hülyeségi fokot" kablirálták fel, míg a vízszintesre a hozzászólások számát...
- A hozzászóláshoz be kell jelentkezni
veled is csak eggyel tobben vagyunk. :)
Tyrael
- A hozzászóláshoz be kell jelentkezni
Adott 3 ember, akik arról vitatkoznak amihez lövésük sincs: Még véletlenűl sem tudnak egyetlen nyomós érvet sem előkaparni sem pro- sem kontra :D
- A hozzászóláshoz be kell jelentkezni
a "lovesuk nincset" kikerem magamnak, postgrest mysql-t mar nyuvom egy ideje nap mint nap. :)
Tyrael
- A hozzászóláshoz be kell jelentkezni
Nem jutottunk előbbre de én sok kérdésre választ kaptam, többre mint tegnap :)
- A hozzászóláshoz be kell jelentkezni