by
allistar >> Wed, 16 Jul 2003 22:02:48 GMT
Hi,
I am new to Jade, have now downloaded Jade 6 and currently having a close look & feel. I have a number of questions to which I hope some Jade developers etc could answer. My back ground is Oracle Database development.
Hi Phil, hopefully I can be of help (I've been developing with Jade for 6 years now, I contract for a company that has over 300 sites using our Jade based financial software around the globe).
Q1: What are the general sizes of the databases being used. eg 5 GB, 50GB, 100 GB or larger. How many records (objects) are being stored etc.
We have small databases (around 250Mb and fairly large ones (about 15Gb). I have heard of databases in the 80-90Gb range.
I have never done an object count on any of our sites but I don know that we sometimes get 20 million instances of just one class. I wouldn't be surprised is we had database out there with 50 - 100 Million objects in them.
Q2: Looking at the demo system the search facility uses a foreach loop when evaluating an object. What is performance like with large volume of objects, for general querying/ reporting. eg 50,000,000 or more objects ( general ledger lines etc).
I haven't looked at the demo system nyself. Using s foreach loop is generally not a good idea as an exclusive lock is placed on the collection yuo are iterating. This prevents anyone else from updating or locking that collection during the iteration - and if it is a heavily used or large collection that could have adverse side effects. The best way os to use iterators as the collection isn;t locked for the duration of the iteration.
Querying performance is quite good - but it all depends on how you write the query and how the collections are keyed. If your collection of GL lines is keyed by date and the query is also by date (say between two dates) then using an iterator you could jump in and out of the collection at the appropriate points, like this:
line := allGLLines.getAtKeyGeq(startDate);
if (line <> null) then
iter := allGLLines.createIterator();
iter.startAtObject(line);
while (iter.next(line) and (iter.date <= toDate)) do
results.add(line);
endhwile;
delete iter;
endif;
That loop would be quite efficient as even though there may be 50 million objects in the collection there may only be 500 that match your criteria, so you are only "touching" 500 objects (which means the database server is only fetching those 500 from the actual database, instead of fetching all 50 million).
Q3: Is there any advance index options for querying objects.
I'm not quite sure what you mean. Collections can be keyed (i.e. MemberKeyDictionaries). You can defined multiple keys for a collection if you want to, and quite often you may want to define multiple collections that hold the same objects, just keyed in a different order.
Q4: Is anyone one using Jade for any text searching of SLOB. Is there any advance indexing of text for quick searching of stored documents etc.
There are a few ways of doing this. Here is one:
When the text is initially saved process it by pulling out all words in it (where is word is defined as being a sequence of character separated by whit space - a spcae, tab, CrLf). Create an new class called "SearchWord" with a String property (called "word") and a collection that contains all documents the have this word in it. So for each solb you may have say 1000 instances of the SearchWord class. There should only be one SeachWord object per actual word. Now when you are searching for a particular wor you simply need to do a allWords.getAtKey(word) which will return you a SearchWord object, which contains a collection of all documents that actually have this word in it.
This approach provides for very fast searching of SLOBS, but at the expense of database size (a lot of objects are required for this) and a possible delay in actually parsing the original SLOB in the first place (depends on the size of the SLOB).
Q5: What is performance in general like when using reasonable sized databases. Can Jade handle large volumes etc.
In my experience Jade scales quite well, but here are some tips:
- make sure you have a good knowledge of the mechanics of object caching. - make sure you have a good caching/object consistency strategy.
- make effective use of dictionary keys.
- don't be afraid to trade database space off over performance (like in the SearchWord tip up above).
Q6: Is anybody using any type of Business Intelligence/End User Reporting tools. i.e adhoc querying etc.
We have a few tools that fit in this category:
- we have develop our own ad-hoc reporting tool (well before ther Jade one was develped and released)
- we have ad-hoc querying tools that our sites can use (it is a generic tool that will work on any Jade database - it looks at the meta data to effectively query on large collections by creating transient methods and executing them - giving best overall performance and flexibility).
- we have web interface tools that let us easily expose the Jade database to a web page (see
http://silvermoon.co.nz/jhp.html for details).
Thank in advance
I hope this has helped,
Phil
Allistar.
------------------------------------------------------------------
Allistar Melville
Software Developer, Analyst
allistar@silvermoon.co.nz
Auckland, NEW ZEALAND
Silvermoon Software
Specialising in JADE development and consulting
Visit us at:
http://www.silvermoon.co.nz
*NEW* Simple web access to Jade at:
www.silvermoon.co.nz/jhp.html ------------------------------------------------------------------