Help me choose OrientDB over RDBMS for data analysis (concrete example)

50 views
Skip to first unread message

Fabian Renner

unread,
Jan 21, 2015, 10:49:57 AM1/21/15
to orient-...@googlegroups.com
Hey, 

I have a hard time figuring out if OrientDB fits our enterprise needs. But I really enjoy the DB.

The problem is I am always thinking, that I'm doing it the wrong way.


We are analyzing data coming from external vendors and we have to find the needles in the heystack.


Concrete example:
- I have 2 Tables (customer and account)
- these 2 tables have private keys and foreign keys
- 1 customer -> many accounts / many accounts -> 1 customer
- every account has a balance
- every customer has a specific age

These 2 tables come from a RDBMS-like thing (IDs as connections)

I imported the 2 tables in Java using "ODatabaseDocumentTx" ending up with 2 classes (account and customer).
After that I ran a bunch of SQL statements to create Links between them (LINK from account to customer and LINKLIST from customer to account).

What I want to get now:
- all customers where age < 18 that have
- any account where the balance < 0 

And from these customers I want to 
- display the balance of all accounts summed up
- display the number of accounts
- display the first account number
- also I want to display the name, the ID and what not

My Question is now:
- is it better to use the graph DB (edges instead of links)? 
- how can I get from RDBMS SQL to Orient 


Example SQL-Query was (I stripped out and translated a few things)

Select customer.ID, customer.Name
        'Age               : ' || cast(customer.age as char(3))    as Info_001,
        CASE WHEN count(account.accountNr) = 1 THEN 'Balance               : ' ELSE 'Balance (all accounts) : ' END || cast(sum(account.balance) as char(16)) as Info_002,
        CASE WHEN count(account.accountNr) = 1 THEN 'AccountNr         : ' ELSE 'first accountNr : ' END || cast(min(account.accountNr) as char(10)) as Info_003,
        CASE WHEN count(account.accountNr) > 1 THEN 'Count of further Accounts : ' || cast((count(account.KtoNr) - 1) as char(3)) ELSE '' END as Info_004
    from account, customer,
    where account.customerID = customer.ID
        and account.balance < 0
        and customer.age < 18
    group by customer.ID, customer.Name
    having abs(sum(account.balance)) > abs(0)

This gives me the correct customers matching my criteria. 
Reply all
Reply to author
Forward
0 new messages