On 3/25/07, Florent Daigni?re (NextGen$) <nextgens at freenetproject.org> wrote: > * bbackde at googlemail.com <bbackde at googlemail.com> [2007-03-25 21:01:06]: > > > I know that Berkeley is'nt relational. But according to some > > informations I read in the berkeley FAQ you could implement the same > > behavior by implementing some of the scan stuff by yourself... > > I really do think that frost should use a relational database. > How are you currently storing messages ? > > What I would have done is a table where you store: > > idMsg | idSender | idBoard | subject | idPrevMsg | content | tstamp - if > needed | isNew | isStared | is Marked > > an other table for senders : > > idSender | nick | key | whatever > > an other table for boards : > > idBoard | name | pubKey | secKey > > and that's all (assuming you drop filetransfert capabilities)... > > With that schema and a relationnal database, thread reconstruction ought > to be *really* faster than your current code... And you would be able to > do nice stuffs like "Filter new Messages" easily
Its more complex in the real world. We have a table for incoming messages, and for sent, unsent and archived messages. And external tables for the message content (performance!). The DDL for the message table looks like this: "CREATE TABLE IF NOT EXISTS "+getMessageTableName()+" ("+ "primkey BIGINT NOT NULL,"+ "messageid VARCHAR,"+ "inreplyto VARCHAR,"+ "isvalid BOOLEAN,"+ "invalidreason VARCHAR,"+ "msgdatetime BIGINT NOT NULL,"+ "msgindex INT NOT NULL,"+ "board INT NOT NULL,"+ "fromname VARCHAR,"+ "subject VARCHAR,"+ "recipient VARCHAR,"+ "signature VARCHAR,"+ "signaturestatus INT,"+ "publickey VARCHAR,"+ "isdeleted BOOLEAN,"+ "isnew BOOLEAN,"+ "isreplied BOOLEAN,"+ "isjunk BOOLEAN,"+ "isflagged BOOLEAN,"+ "isstarred BOOLEAN,"+ "hasfileattachment BOOLEAN,"+ "hasboardattachment BOOLEAN,"+ "idlinepos INT,"+ "idlinelen INT,"+ "CONSTRAINT "+getPrimKeyConstraintName()+" PRIMARY KEY (primkey),"+ "CONSTRAINT "+getUniqueMsgIdConstraintName()+" UNIQUE(messageid),"+ // multiple null allowed getBoardConstraint()+ // only for messages , not for sent messages getUniqueMsgConstraint()+ // only for messages and sent messages ")"; The BOARDS, IDENTITIES and OWN_IDENTITIES table look nearly similar to what you wrote. > > > Before I decided to use McKoi I also tried hsqldb (used by thaw) but > > it was much slower than McKoi, especially with COUNT queries and some > > other queries often used by Frost. According to the hsqldb forums they > > know about this issue, but there is still no solution. > > May I ask why do you need count queries for ? e.g. for the statistics dialog. But hsqldb was slow in different areas too, currently I don't remember what areas...but all tests pointed to McKoi. > > > > > I didn't found any other relational java database that runs in the > > same JVM as frost. Hence I came to the point to think about to use > > berkeley and to implement the 'relational' part by myself. I need no > > joins so I think this could be possible. What I need are queries that > > have more than one condition (AND/OR). > > on BDB the basic operations are like a hashtable: > push(key, data) > pop(key) > isEmpty(key) > > Then there might be willcards on keys, but that's all. The FAQ entry made me believe that I could implement the SQL-like behaviour by myself. Could'nt I implement the records scans over indices? I think this would be it. > > > > > On 3/25/07, Florent Daigni?re (NextGen$) <nextgens at freenetproject.org> > > wrote: > > >* bbackde at googlemail.com <bbackde at googlemail.com> [2007-03-25 > > >19:41:27]: > > > > > >> I currently check if the berkeley db could be a replacement for McKoi > > >> db which is used by Frost. I'm not too happy with McKoi. > > >> > > >> But I still don't get the concept of berkeley db. I need queries like: > > >> give me the messages (aka. db keys) of all messages that are: > > >> - new (isnew=true) > > >> - valid (isvalid=true) > > >> - not older than X days (msgdate >= oldestDate) > > >> > > >> berkeley seems to access all stored object by key only (?). Do I have > > >> to implement the 'table scan' by myself? How can I learn about this, > > >> where are more complex examples (transition from sql to berkeley db)? > > >> > > > > > >BDB isn't a relational database. > > > > > >> If someone can help and assist me that would be such great :) > > > > > >You probably don't want to use BDB but a relational one. Have you ever > > >considered using the same as thaw ? > > > > > >NextGen$ > > > > > >-----BEGIN PGP SIGNATURE----- > > >Version: GnuPG v1.4.6 (GNU/Linux) > > > > > >iD8DBQFGBsVFU/Z/dHFfxtcRAi1cAJ9Cd9c1Npy4drDb3xDcChoix91xSgCfS91e > > >ahgU4sunO1/1XFFrTSJEPWQ= > > >=Jo9u > > >-----END PGP SIGNATURE----- > > > > > >_______________________________________________ > > >Devl mailing list > > >Devl at freenetproject.org > > >http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl > > > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.6 (GNU/Linux) > > iD8DBQFGBs/eU/Z/dHFfxtcRAuO2AJ42G3YPtYbTBuGYfhk0T/tmwzL6GACgoyNO > S0Sp+acdi6KDAZLA9HAEji4= > =ktUb > -----END PGP SIGNATURE----- > >