14. maj 2005 - 12:27Der er
13 kommentarer og 1 løsning
Binær streng til extended ASCII
Hejsa
Vi er to studenrende der arbejder på et projekt der skal optimereren database ved at gemme en bitsekvens på den bedst mulige måde.
Vi har en binærstreng (repræsentret som en String i Java) som vi gerne vil have gemt som en string i en database da man så kan bruge varchar som datatype og så hive den ude igen og i java lave den om til en binærstreng igen.
Kan nogen hjælpe med det. Har søgt i en tidligere poster, men synes ikke der er nogen der beskriver det samme problem.
I teorien er det lige meget hvordan vores bitsekvens repræsenteres så længe det er en string i databasen der på en komprimeret måde repræsenterer vores unikke bitsekvens og hver character unikt kan oversættes til en binær streng.
Vores bitsekvens er altid delelig med 8 altså den fylder et helt antal bytes.
jeg ville helt klar foreslå at i opbevarer dat i et byte array og gemmer/henter til/fra databasen via en PreparedStatement og at feltet i databasen er BLOB (eller hvad det nu hedder i den pågældende database).
Dataen kommer fra en XML-dokument som køres igennem en SAX-parser. Derfra får hver knude et nummer. Det nummer omsætter vi til en bitsekvens for at det skal fylde mindst muligt. Ved at sammensætte bitsekvensen fra alle tidligere knuder kan man for hver knude i hierakiet lave en unik sti op til root-elementet. Den sti vil vi gerne gemme som en bitsekvens. Problemet er at stien kan fylde alt mellem 4 byte og 12 byte. Derfor vil vi gerne bruge en datatype der selv tilpasser sig indholdet. Først omsatte vi sekvensen til en Integer, men efterhånden blev tallet for stort så nøjagtigheden røg. Derfor har vi vendt os mod String så en sti på fx 128 bits kan repræsenteres som en String på 16 tegn ex. "GD&GSDJSGDJdfhjk". Den string vil vi så hive ud af databasen transformere tilbage til en bitsekvens og arbejde på den.
Hvis det i gemmer i databasen virkelig er et træ, så er besbparelsen ved variabel længde minimal. I en binært træ vil fx halvdelen af jeres node have fuld længde (bladene) halbdelen af resten vil have 'fuld lengde -1', osv. Ikke meget at spare. Og et træ bygget udaf et xml dokument wil sandsynligvis være meget bredere.
Prøv lige at regne på det om besparelsen er umagen værd.
Det er jeg ikke helt med på. Vi gemmer ikke XML-dokumentet som et træ med laver en tabel for hver niveau i XML-dokumentet. Jeg er helt sikker på at det godt kan betale sig at vælge en datatype med variable længde.
Fro lige at opsmummere porblematiken. Jeg har en bitsekvens - den vil jeg gerne lave til en form for Characters. Gemme i min database som en string og derefter hive ud af databasen og lave den til en bitstreng.
Grunden til at jeg ikke bare laver bitstrengen til en Integer er at tallet bliver for højt så det bliver afrundet.
Problemet er at vi gerne vil have en datatype der tilpasser sig indholdet. Vores bitstreng kan være alt mellem 4 bytes og 15 bytes.
Hele vores opgave går ud på at komprimere en sti udtryk som en bitsekvens op til roden på den mindst mulige plads derfor nytter det ikke noget hvis vi bruger en datatype der ikke tilpasser sig indholdet.
Grunden til at vi vil bruge en String er at vi laver bytearrayet om til en string så vi kan gemme det i databasen. Og problemet er også at Java ikke har en type der hedder bits. Derfor gemmer vi den i en String.
Vi prøver lige med PreparedStatement setBytes. Gider du kigge ind lidt senere hvis det også glipper med den fremgangsmåde?
Hej Arne Nu har vi løst det ved at lave den bitstregen til en char og derfra til en string og indsat det som en varchar. Du har været super fin til at hjælpe så hvis du lægger et svar vil jeg gerne give point.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.