Madis is a extensible relational database system built upon the SQLite 
database and with extensions written in Python (via APSW SQLite 
wrapper). Its is developed at:

http://madis.googlecode.com

Due to Madis’ SQLite core, the database format of Madis is exactly the 
same as SQLite’s one. This means that all SQLite databases are directly 
usable with Madis.

Madis' enables to quickly develop (in Python) and test new relational 
functions and virtual tables. SQL syntax extensions were also created to 
simplify queries which use these functions.

Madis' main goal is to promote the handling of data related tasks within 
an extended relational model. In doing so, it promotes the database, 
from a support role (storing and retrieving data), to being a full data 
processing system on its own. Madis already includes functions for file 
import/export, keyword analysis, data mining tasks, fast indexing, 
pivoting, statistics and workflow execution.

Some of the functionality of Madis is:

- Programmable (in Python) row functions (via APSW):

mterm> select detectlang('Il en est des livres comme du feu de nos foyers');
french

- Programmable (in Python) aggregate functions (via APSW):

mterm> select concatterms(a)
from (select "term1+term2" as a UNION select "term2 term3" as a);
term1+term2 term2 term3

- Programmable (in Python) virtual tables (via APSW):

mterm> select * from file('./demo/continents.tsv') limit 2;
Asia|AF
Europe|AL

- Multisets (functions that return multiple rows/columns):

mterm> select * from table1;
a             |b
-------------------------------------------
'car wood bike'| 'first group'
'car car wood'  |'first group'
'car wood'        |'first group'
'car wood ice'  |'first group'
'ice'                  |'second group'
'car ice'            |'second group'
'car cream'      |'second group'
'icecream ice car'  |'second group'

mterm> select b, freqitemsets(a, 'threshold:2', 'noautothres:1', 
'maxlen:2') from table1 group by b
b            | itemset_id | itemset_length | itemset_frequency | item
---------------------------------------------------------------------
first group  | 1          | 1              | 4                 | wood
first group  | 2          | 1              | 4                 | car
first group  | 3          | 2              | 4                 | car
first group  | 3          | 2              | 4                 | wood
second group | 1          | 1              | 3                 | ice
second group | 2          | 1              | 3                 | car
second group | 3          | 2              | 2                 | car
second group | 3          | 2              | 2                 | ice

- On the fly multidimensional indexing (the cache virtual table):

The index is based on kdtrees and is extremely fast with queries 
involving multiple constraints.

mterm> select country.c2, continent.c1
   from file('countries.tsv') as country,
        file('continents.tsv') as continent
   where country.c1=continent.c2;
Aruba|Americas
Antigua and Barbuda|Americas
United Arab Emirates|Asia
Afghanistan|Asia
. . . . . . . . .
Query executed in 0 min 2 sec 40 msec

mterm> select country.c2, continent.c1
   from file('countries.tsv') as country,
        (CACHE file 'continents.tsv') as continent
   where country.c1=continent.c2;
Aruba|Americas
Antigua and Barbuda|Americas
United Arab Emirates|Asia
Afghanistan|Asia
. . . . . . . . .
Query executed in 0 min 0 sec 71 msec

- Workflows:

mterm> exec flow file 'workflow.sql';

Above query uses Madis' SQL inverted syntax.

- Pivoting:

http://madis.googlecode.com/svn/publish/row.html#pivoting

--

All above functionality has been created via row/aggregate/vtable Python 
extensions (APSW offers these in very nice API), and the aforementioned 
SQL syntax extensions.

In practise Madis has been proven to be very fast in data analysis tasks 
and in the development of data processing workflows.

A little note:

The high quality of APSW's and SQLite's code, has helped immensely in 
developing Madis. We have strained both of these projects as much as we 
could, and they coped beautifully. We literally had queries that spanned 
multiple pages, which executed in seconds.


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to