Custom fields schema

Sean McAfee etzwane at schwag.org
Sun Dec 19 23:38:43 UTC 2004


Myk Melez <myk at mozilla.org> wrote:
>Sean McAfee wrote:
>>Fields-as-columns may make life easier for the programmer, but it's the
>>needs of the users that should be coming first.

>Agreed, and that's why I'm suggesting it, not to make our lives easier, 
>especially considering I think fields-as-columns is harder to develop.  
>Users would be better served by an app living on top of a database which 
>uses the optimum architecture for custom fields.  For my money, that's 
>the relational model developed over the last several decades for the 
>purpose, and which we already use for standard fields.

Well, here's some hard data.

Attached is a Perl program, construct-tables.pl.  It creates two tables,
REALCOL and DISTCOL.  REALCOL has two columns, BUG_ID and CF_FOO, and is
meant to be a simplification of a BUGS table with a single
custom-field-as-real-column called FOO.  DISTCOL has three columns, BUG_ID,
FIELD_ID, and VALUE, with an index on FIELD_ID, and is essentially identical
to my proposed CF_SHORTSTRING table.  The program then populates both tables
with data for 300,000 bugs.  For each bug, it constructs a string of ten
joined words randomly chosen from /usr/share/dict/words, inserting the
string "meta" at a random position in the middle .1% of the time.  The bugs
are inserted into DISTCOL with a field_id that starts at 0 and increases by
one each time, going back to zero when it reaches 100.  The string is
inserted into REALCOL only when the field ID is 0; otherwise NULL is
inserted for the column CF_FOO.

The tables constructed, here's what I see:

mysql> select count(*) from realcol where instr(cf_foo, 'meta');
+----------+
| count(*) |
+----------+
|       20 |
+----------+
1 row in set (0.40 sec)

mysql> select count(*) from distcol where field_id = 0 and instr(value, 'meta');+----------+
| count(*) |
+----------+
|       20 |
+----------+
1 row in set (0.03 sec)

So the distributed-tables solution is clearly much faster.


--Sean
-------------- next part --------------
A non-text attachment was scrubbed...
Name: construct-tables.pl
Type: application/x-perl
Size: 1380 bytes
Desc: not available
URL: <http://lists.bugzilla.org/pipermail/developers/attachments/20041219/b6eef18e/attachment.pl>


More information about the developers mailing list