Sometime back I had mentioned a new cheminformatics toolkit, Indigo. Recently, Dmitry from SciTouch let me know that they had also developed Bingo, an Oracle cartridge based on Indigo, to perform cheminformatics operations in the database. This expands the current ecosystem of Open Source database cartridges (PGChem, MyChem, OrChem) which pretty much covers all the main RDBMSs (Postgres, MyQSL and Oracle). SciTouch have also provided a live instance of their database and associated cartridge, so you can play with it without requiring a local Oracle install. (It’d be useful to provide some details of the hardware that the DB is running on, so that timing numbers get some context)
I’m not sure about the rest but unfortunately OrChem is NOT a real oracle cartridge. It consists of java stored procedures making it very dependent on java and oracle versions. It will make it easier to port to differnt DDBMSs.
Hmm, I didn’t realize that. What makes a real cartridge?
Hello Rajarshi,
Thank you for this post. I have added some technical details about our server:
http://groups.google.com/group/indigo-general/msg/f16c419dd51897f8
With best regards,
Dmitry
Hi Dmitry, thanks for the hardware spec
> Hmm, I didn’t realize that. What makes a real cartridge?
A cartridge extends the RDBMS in such a way that it can handle domain specific abstract datatypes.
It’s functions interface deeper with the RDBMS, especially the optimizer, than plain custom functions.
A true cartride must provide a transparent index on the abstract datatype and should give proper statistics to the optimizer for query planning.
That’s mainly the way Oracle sees it.
My 2ct: I’d say the transparent indexing is the terminator between a bunch of custom functions and a data cartridge.
Well a cartridge is a independent piece of software running outside the database and can be called from within the database using a service.
Java is really stored in the database and runs on the internal jvm. This makes the java and the oracle version very important.
>Well a cartridge is a independent piece of software >running outside the database and can be called from >within the database using a service.
Hm… No.
The cartridge developer guide from Oracle (and no other similar document from other vendors) does not require such implementation details.
Infochem implements their cartridge as a service running outside the database as a service.
Symyx, Daylight, Bingo and pgchem::tigress etc. run inside the address space of the server and that makes the version of the database server very important too.
Hello Ernst-Georg,
A small note: Bingo is not really being run inside Oracle’s address space, neither is any other Oracle cartridge written on C/C++. Oracle has a special process called extproc, which loads the cartridge DLL and communicates with Oracle via TCP or IPC. This makes Oracle not vulnerable to cartridge crash.
As for Oracle version, there is not much difference for C/C++ cartridge between Oracle 9, 10, and 11. Only some small compatibility issues, and some performance issues.
>Oracle has a special process called extproc, which >loads the cartridge DLL and communicates with Oracle >via TCP or IPC.
Point taken, you’re absolutely right.
But you can still generate ORA-600s with careless code in the extproc listener or pollute the query cache with broken prepared statements – which technically does not crash the server but still renders it unusable.
Hello Ernst-Georg,
Now i am studying on oracle cartridge, can you give some material about oracle cartidge?
as you said:>It’s functions interface deeper with the RDBMS, especially the optimizer, than plain custom functions.
now i want to use the interface,such as ODCIStatsFunctionCost,to get an optimal plan.According to oracle data cartridge guide,i rewrite these interface,but generate ora-6550 exception,do you know how to solve this problem? i am looking forward to your replying.Best wishes.