ugrás a tartalomhoz

Szinkronizálás

laikus · 2010. Jan. 29. (P), 18.29
webes SQL adatbázis szinkronizálása otthoni gépen levővel.
 
1

Hogyan oldható meg?

laikus · 2010. Jan. 29. (P), 18.45
Másik fórumban már leirtam, de nem értették meg, ezért inkább itt irom le ismét.

Az a feladat, hogy létre kell hozni egy olyan SQL adatbázist, amit én a saját laptopomon tudok kezelni, és egy ugyan ilyet weben is meg kell valósitani, amit - elvileg pár ezren, valóságban valószinüleg csak páran - módosithatnak és bövithetnek. Azaz törlési jogom csak nekem lesz, és nekem kell kezelni az azonos rekordokhoz érkezett különbözö módositások összefésülését. A probléma azt jelenti, hogy elég gyorsan 10-50 milliós rekordszám fog kikerülni, mindenki napi pár száz - pár ezer rekordot fog átnézni, módositani, ha ezek közül törölni akar vagy újakat akar felvinni, akkor emilen nekem elküldi a kivánságát, megoldom és a következö frissitéstöl kezdve elérhetö lesz.

Nekem csak access és oracle adatbázisok létrehozása és kezelése terén van gyakorlatom, azt is xp alatt végeztem. Tudom, hogy weben a mysqlt használják, azt nem tudom, hogyan tudom ezt a saját gépemen is kezelni, közvetlenül. Azt tudom, hogy access ilyen mennyiségü rekordokat már nagyon lassan kezel, nem tudom, mysql ezzel hogyan áll, mik a korlátai. (Csak pár tucat oszlop lesz rekordonként, többsége szöveges, néhány numerikus, de pl. képek vagy videok vagy egyebek nem lesznek)

Valamint az is érdekel, hogyan tudom a webes és a saját gépemen lévö adatbázisokat szinkronizálni. Feltételezem, arra az idöre le kell tiltani a webes hozzáférést, vagy ha sokáig tart, valamilyen másolatot kell létrehozni, hogy a többiek tudjanak dolgozni. A webes technológiákat - php, stb. - nem ismerem, annyit tudok, hogy ftp kapcsolattal lesz célszerü hozzáférni a webes adatbázishoz, viszont tartok attól, hogy az ftp-n titkositatlan név és jelszó gondokat okozhat.

Valamint azt sem tudom, hogy mindig a teljes adatbázis lementése, az én gépemen meglévövel összefésülése, majd visszatöltése a járható út, vagy valamilyen módon megoldható, hogy csak az elözö szinkronizálás után módosult rekordokat kelljen letölteni?
2

Asztali alkalmazás

S3RI0US · 2010. Jan. 29. (P), 19.17
Erre szerintem a legjobb megoldás egy egyszerü program. Én erre egy pl Delphiben készült programot ajánlanák. Ha lesz időm megírom neked a kódot, de ha már programoztál, a C++ se nem egy extra programnyelv...
3

Mire, hogyan?

laikus · 2010. Feb. 1. (H), 17.12
Még mindig az a problémám, hogy nem tudom, mit és hova.

Azt tudom, hogy a webes megoldáshoz olyan helyet kell keresni, ahol php fut, és alatta mysql van telepitve. A mysql telepitési könyvekböl azt is tudom, hogy mysql-t csak úgy lehet használni, ha elözöleg telepitve van webszerver, és kell még néhány más program is. Azonban nekem csak egy saját számitógépem van, eszem ágában sincs rá webszervert telepiteni. Nemrég kaptam egy halvány utalást, hogy mysql-t lehet valahogy használni webszerver és php nélkül is, de eddig nem tudtam kideriteni, hogy hogyan.

A kérdések, amire nem tudom a választ:
1. mysql használható-e önálló PC-n (tehát webszerver, internetkapcsolat, php, python, stb. egyebek nélkül), ha igen, hogyan kell telepiteni.

2. ha használható, hogyan, milyen módon lehet a szinkronitást megvalósitani
(a válaszod szerint valamilyen "célprogramot" kell erre irni, és azt kell futtatni)

3. ha nem használható, akkor oracle vagy access adatbázissal hogyan lehet megoldani a szinkronitást?

Ha túl értetlen vagyok, kérek visszajelzést, mert nem vagyok képben.
4

Telepítés

Poetro · 2010. Feb. 1. (H), 18.07
1. mysql használható-e önálló PC-n (tehát webszerver, internetkapcsolat, php, python, stb. egyebek nélkül)


Természetesen, a webszerver és internet kapcsolat, vagy telepített programozási környezetek nélkül is tökéletesen működik, nem függ tőlük.

Telepítés:

Letöltöd a MySQL Community Server operációs rendszerednek megfelelő változatát, és végigmész a szokásos telepítő varázslón.

Ezek után, amennyiben nem tetszik a MySQL console, akkor a programozási nyelvednek megfelelően letöltöd a MySQL Connector neked tetsző változatát. Részletes információ van róla, hogy hogyan tudod használni a drivert.

Amennyiben nem szimpatikus egyik sem, és inkább valami Access-szerű eszközre vágysz, akkor létezik Windows alá többek között a MySQL Workbench, amivel szépen meg tudod tervezni az adatbázisodat, valamint műveleteket végezhetsz rajta.

2. ha használható, hogyan, milyen módon lehet a szinkronitást megvalósitani


A távoli SQL kiszolgálóról letöltöd valamilyen formában - akár SQL-ben -, az adatokat, végrehajtod rajtuk a kívánt módosításokat, bevezeted a saját lokális adatbázisodba, majd kiexportálod mondjuk SQL formában a saját adatbázisodat, és frissíted a távolit az megfelelő kérésekkel. Akár azt is teheted, hogy már egyből direkt SQL utasításokat adsz ki, és nem egy tábla teljes tartalmát töltöd fel.

3. ha nem használható, akkor oracle vagy access adatbázissal hogyan lehet megoldani a szinkronitást?


Mivel léteznek mindenféle programozási nyelvhez MySQL kapcsolatot kiépítő modulok, innentől el lehet indulni. Az egyes MySQL utasításokat át lehet valahogy alakítani a kívánt adabázismotorod utasításaira, még ha nem is egyszerű. Ugyanis habár mindegyik SQL utasításokat használ, de mindegyik egy saját dialektusát, valamint nem mindegyik szolgáltatás érhető el mindegyik motorban.
5

Technikai kiegészités

laikus · 2010. Feb. 1. (H), 20.26
Nagyon köszönöm, végre kezdek képben lenni. ;)

Az általam eddig felismert szűk keresztmetszetek:

1. Az adatbázis maximum kb. 50 millió rekordból fog állni. Ezért a legcélszerübb a saját gépemen, közvetlenül SQL parancsokkal generálni a maximális elemszámot, majd szürésekkel eltávolitani a feleslegeseket. Webes hozzáféréssel nyilván csak egyesével, vagy nagyon korlátozott számú rekordot lehet kezelni. Ezért az elsödleges cél a megfelelö rekordok megtalálása, a feleslegesek kiszürése, illetve az esetleg hiányzók, vagy véletlen törlések pótlása. Amikor ez megvan, akkor hátradölök, és átadom a többieknek a terepet, mert az egyes rekordok tartalmát már egyesével kell feltölteni, módositani, azt már csinálhatják csak weben keresztül.

2. Az 50 milliós rekordszám miatt access azonnal kilöve, illetve csak 10-50 db rész-adatbázisra bontva kezelése lehetséges a sebesség- és memória korlátok miatt. Kérdés, a mysql ilyen mennyiséggel - pláne weben keresztül - hogyan birkózik meg.

3. A fentiek alapján az elsö szakaszban az én gépemen történik a rekordok hozzáadása és törlése, viszont a többiek weben keresztül elkezdik a megfelelö rekordok adatokkal történö feltöltését. Tehát sajnos nem tudom azt megtenni, hogy mindig az én gépemen lévö a jó, és felülirom az ottanit, hanem figyelni kell, hogy mely webes rekordok tartalma változott, kik és mikor módositották és ezeket meg kell örizni.

4. A te 2. és 3. válaszod alapján a megoldás az, hogy mindig letöltöm a teljes webes adatbázist, az adatokat tartalmazó rekordokat beolvasom a saját adatbázisomba - nyilván csak arra kell figyelni, hogyha olyan rekordba történik irás, ami nálam törlésre van kijelölve, vagy korábban már törölve lett, akkor azt helyre kell állitani, amig tisztázódik az adott rekord sorsa - és az igy aktualizált adatbázist fel kell töltenem a webes tárhelyre.

Még az nem tiszta a számomra, hogy ez hogyan müködik:
a, egyszerüen felülirom az ott lévö adatbázist, vagy

b, egy munkapéldányként kell feltölteni, és majd átnevezés révén kell megcserélni a kettöt, és utána kell törölni a korábbi változatot

Valamint valahogy kezelni kell azt az esetet, amikor a webes adatbázis letöltése, és a gépemröl aktualizált változat visszatöltése közötti idöben történtek webes hozzáférés révén adatmódositások. Vagy tiltani kell ezt a lehetöséget - kérdés, mennyi idöre - vagy kezelni kell az ilyen átmeneti vagy munka- adatbázisokat is.

5. Az sql adatbázisok, táblák elvileg egységes szabványokon alapulnak, de a gyakorlatban az indexelések és egyéb technikák egyediek, ezért nagyon kockázatos sql alatti tömeges változtatások végrehajtása. Jó néhányszor tapasztaltam access alatt, hogy közvetlen adatfrissités révén még egyedi mezöknél is gond nélkül lehetett azonos rekordokat betölteni, ami csak a lekérdezések futtatásakor jelentkezö hibáknál derült ki. Pár ezres rekordszámnál ez még "szemrevételezéses eljárás" révén megoldható, de milliós rekordszámnál nagyon sokrétü hibakezelésre kell figyelni. Emiatt attól tartok a legjobban, ha az én gépemröl hibás rekordok kerülnek ki, és a webes adatfeltöltés során a módositások más rekordokba kerülnek. Ennek a hibának a kiszürése a legnehezebb, csak a napi módositások egyesével történö ellenörzésével szürhetö ki, amire nincs idö. Ezért hoztam azt a döntést, hogy rekordokat törölni és hozzáadni csak én tudjak, legalább adatvesztés vagy hamis feltöltés ne legyen, de az adatmódositások kezelésére még nem látom a müködési kockázat kiszürési lehetöséget.

6. Az utolsó félelmem a webes technikák miatt van. Eddigi ismereteim szerint a ftp az adatvédelem leggyengébb pontja, név és jelszó titkositatlansága miatt egyszerü "lehallgatással" megszerezhetö a hozzáférés. Márpedig ezt is én fogom kezelni, az enyém lesz a teljes felelösség, és nem látom a megbizható védelmet. :-(
6

Méret

Poetro · 2010. Feb. 1. (H), 21.42
Én már láttam 100 Gb fölötti adatbázist, úgyhogy szerintem az 50 millió rekord nem hiszem hogy olyan nagyon nagy probléma lenne, legfeljebb több memória / CPU szükséges.
7

Ja

laikus · 2010. Feb. 3. (Sze), 13.02
Én is láttam, de az nem access volt.
Valamint alapvető korlát, hogy az én gépemen lévőnek meg kell egyeznie a weben lévővel.

A szinkronizálás technikai megvalósitása végülis hogyan lesz lehetséges? Vázoltam néhány ötletet, ezek közül melyik a jó, vagy hogyan kellene másként megcsinálni?
8

Hogyan lesz lehetséges?

vastagl · 2010. Feb. 4. (Cs), 12.15
Szinkronizáláshoz lehet mondjuk ezt : letöltöd a navicat-ot (ez egy admin program).
Tools menü -> Data synchronisation, vagy Data transfer. Bi directionális szinkront is lehet vele .

még egyedi mezöknél is gond nélkül lehetett azonos rekordokat betölteni,
- írod.Szerintem túlzotttan óvatos vagy. Ott valami más lehetett.
Ha egy mező 'primary key' , oda nem töltesz be két egyformát. Se access-be , se sehová. Nincs ilyen hogy, hú de sok millió rekord, de elfáradtam, mostmár hagyom, lehessen betölteni több egyformát is. :-)

Ha dump-okat kell mégiscsak töltened, használj sftp-t.

Mysql - nek is van enterprise változata, ebben megy a data szinkron automatikusan, szépen megcsinálja a replikációkat , de ez már fizetős. Általában valahol itt válik el a közösségi kiadás meg a vállalati. Például az IBM DB2 express ugyanaz mint a "nagytestvére" - de csak két processzorig lehet használni és az összes ilyen funkció (osztott adatbázis, replikáció stb) hiányzik.

Egyébként meg minek a saját gépedre is egy adatbázis, nem mindegy hol van, illetve amiről kérdeztél azt nem igazán nevezném webes technológiának. Miért nem lehet a másik adatbázis is a külső szervereden. Ha meg már ott van, biztos hogy kell a két példány, nem elég egy két plusz mező ....
9

saját az alap

laikus · 2010. Feb. 10. (Sze), 15.21
Köszönöm a választ, írtam, hogy a saját gépemen kell lennie az alapnak, azon tudom gyorsan aktualizálni az adatokat, így az az alap. a weben lévő azért kell, hogy mások bármikor hozzáférjenek és tudjanak a meglévő adatokhoz kiegészitéseket füzni.

Köszönöm a navicat-ot, jónak tünik, lehet, hogy enterprise is lesz belöle. ;)