CDB update művelettel

Kezdőlap Fórumok Programozás CDB update művelettel

9 bejegyzés megtekintése - 1-9 / 9
  • Szerző
    Bejegyzés
  • #1890654
    linuxforum
    Felhasználó

      Szeretnék egy nagyon gyors számláló adatbázist a perl scriptemhez. (Adott kulcsokhoz rendelnék egy-egy számlálót.)A CDB adatbázisforma éppen megfelelő lenne. A kulcsok fixek, az értékek pedig mindig számok, bár folyamatosan növekvő az értékük.A CDB attól gyors, hogy fix szerkezetű, amibe ez a funkció beleférne. De sajnos nincs update művelete, csak insert.Tudtok olyan adatbázisformátumot, amiben lehet az értékeket növelni, de elég gyors? Vagy a CDB-nek olyan bővítését, amivel az értékei felülírhatóak?

      #2207515
      pointux
      Felhasználó

        Hát neked lehet, hogy egy sima bináris fájl írás elegendő lenne, ezek szerint.Ott tetszőlegesn megírhatod az ujjgyakorlatos rövid függvényeid.Ha csak egy 2d-s tábla van, akkor nem bonyolultabb, mint egy sima bitkép kezelése, ráadásul tényleg gyors, mert egy szorzással és összeadással, majd egy pozícionálással bármilyen elemet kiválaszthatsz.

        #2207516
        linuxforum
        Felhasználó

          A kulcsaim stringek. Egy bináris fájlban a kulcs->pozíció leképezést nem tudom, hogyan oldhatnám meg egyszerűen. Ezt akartam a CDB-ből kihasználni.

          #2207517
          pointux
          Felhasználó

            Vagy te definiálod (ha nem változnak), akkor a perlben pl. egy tömbben, vagy a fájl elejére teszed.Sőt, ha fixek a mezőszélességek, akkor értéket sem kell megadni neki, csak sorrendben lementeni pl.:CoNum, RoNum,'A', 'B', 'C', ...I11, I12, I13, ... I1[RoNum]...I[CoNum][1]...(A vessző és a sortörés nem jelent semmit, a fájlban folytatólagosan vannak.)Azaz- beolvasol két pl. 32 bites számot, ezáltal több, mint 30e sorod és oszlopod lehet.- beolvasol CoNum darab sztringet úgy, hogy olvasod a kerektereket, amíg nullához nem érsz, az a sztring határoló- a sztringekhez sorban társítasz egy számot 1, 2, 3, ...Az adatot úgy kapod meg, ha minden igaz, hogy ( Ro * CoNum + CoList[CoString] ) * sizeof(I), ahol- Ro, az a sor, amit keresel- CoNum, ahány oszlop van osszesen- CoList, a sztringek és hozzátartozó indexek tömbje- CoString, az említett kulcsod- I, az elemÉs akkor gyakorlatilag úgy adhatod meg, hogy pl. 'A1'.

            #2207518
            pointux
            Felhasználó

              Sima lineáris tárolás egy fejléccel… ettől egyszerűbb nincs.Természetesen a sorokat is el lehet nevezni, akkor kell még "sor" számú string és azt is be kell olvasni.Ja és azt elfelejtettem, hogy az előbbi pozició értékéhez hozzá kell még adni a fejléc hosszát, hogy a 0,0 elem valóban 0 pozícióban legyen.

              #2207519
              linuxforum
              Felhasználó

                A gond az, hogy a kulcsok egyrészt nem fixek, másrészt meg sok van belőlük.Azért kell gyors keresés, mert gyakran lefutó programról van szó. Egy tízezres kulcstömböt nem tennék bele a kódba.Serializálni sem szeretném, szerintem ez is nagy időveszteség.Most az ötleteden felbuzdulva azon gondolkodom, hogy ha a cdb-ben tárolnám az indexeket, úgy csak akkor kéne újraírni a cdb-t, ha új kulcs érkezik. Ez ritka. És utána binárisan egy másik fájlból kiolvasom az adatokat.Egyelőre ez járható útnak tűnik, bár nem a legszebb megoldás.

                #2207520
                pointux
                Felhasználó

                  Hát, ha nem tartod a memóriában, akkor a fájlban kell keresni.Akkor ez esetben, ha gyorsan akarnék keresni, akkor tuti ABC sorrendben raknám a kulcsokat és rendelnék hozzájuk egy számot.Ebben az esetben nem kell mind a 10e-ret végigböngészni, sőt elvileg indexálni is lehet őket (és akkor azt lehet tömbben is tartani), de nem feltétlenül kell.Akkor a fájl tartalmaNKey, FirstData, Key1, Idx1, Key2, Idx2, .... adatokvagyNkey, FixSizeKey1, ...Ha a kulcsok mérete nem limitált, akkor meg kell határozni az első adathelyet, hogy tudjál pozícionálni (vagy külön adatfájlt kell létrehozni), ha fix méretű, akkor az fájlpocséklás, de egyszerűbb a kezelés és nincs szükség első byte-ra.Ezután addig kell keresni a kulcsokban, amig előbb van az ABC-ben, nem kell végigkeresni, ha nincs meg egy kulcs, ez a legtöbb esetben gyorsítana.Most az a kérdés, hogy egy kulcshoz tömb, vagy egy érték tartozik, ill, ha tömb akkor változó-e a hossza. Mert akkor derül ki, hogy egy beillesztést mennyire lehet optimalizálni.

                  #2207521
                  linuxforum
                  Felhasználó

                    Szerintem pont valami ilyensmit csinál a CDB, ettől annyira gyors. Azt hiszem, kihagyom, hogy saját indexelést írjak, ha már a CDB-ben ezt hatékonyan lekódolták. Ez az irány egyelőre járhatónak tűnik.Még egyszer köszönöm az ötletet!

                    #2207522
                    nudrat
                    Felhasználó

                      In the first case, the object itself contains its own operation. (Obviously, other parameters can be for multiple items -. A detail) Every object is in memory, the operations separately. Therefore, eat more memory and thread-safe. In addition, a variety of objects in case you do not have any template. Two of the case, if any of the other course may be used to identify an object or registered in other ways for example. identification time. (The latter is of course not always praktkus.) In the second case, the operation of a static method. In one piece, but if an item has to be given as a parameter and not thread-safe. And it's not talked about, if we want to make the object of a derived class already is.

                    9 bejegyzés megtekintése - 1-9 / 9
                    • Be kell jelentkezni a hozzászóláshoz.