Hi all,
I'm newbie in nosql and can't understand how to create nosql style schema.
First, I what describe my problem:
 I need to store results of tests. Each test consists of a list of
parameters(if tests have the same list of parameters that means, two tests
belong to the same testcase), tag or tags, and test result,
For exmaple:
Test1 :
 params:
   -user_role:admin
   -miss_captcha:true
   -test_name:login_test
   -locales:en,es,fr       -- as you can see, parameter can be the list.
testcase: testcase_1_id -- test case id formed as md5 of params.
tags:
   -aaa_site_test
   -smoke
 result:
   -passed
   -some_other_results_stuff( logs, errors' codes and so on )
 start_time: 1330287048  ( time stamp)
Test2 :
 params:
   -user_role:admin
   -miss_captcha:true
   -test_name:login_test
   -locales:en,es,fr       -- as you can see, parameter can be the list.
 testcase: testcase_1_id -- test case id formed as md5 of params.
 tags:
   -aaa_site_test
   -function_tests
 result:
   -failed
   -some_other_results_stuff( logs, errors' codes and so on )
 start_time: 1330290648
Test3 :
 params:
   -user_role:user
   -miss_captcha:true
   -test_name:change_password
   -locales:en
 testcase: testcase_2_id -- test case id formed as md5 of params.
 tags:
   -bbb_site_test
   -function_tests
 result:
   -failed
   -some_other_results_stuff( logs, errors' codes and so on )
 start_time: 1330290648

So, above you can see 3 tests, the first two belong to the same testcase,
but test 1 and test 2 are different test runs, also they have different
tags. Test 3 one more test case.
Usually I will need to execute the following queries:
1)Get latest result for specific tag/tags, for exmale:
Get latest result for aaa_site. Result should be:
Test2 result, because test 1 and test 2 is the same test case, but test 2
is newer.
2)Or get latest result for locale == es, result is test 2.
3)Get the latest results for each test case, result is: test 2, test 3.
4)Get get history for test case 1, result: test 1 and test 2.

I create the following schema:
TestRuns:
*test run id(key) | test case id  | start_time | result id*
test_1_id        | testcase_1_id | 1330287048 | result_1
test_2_id        | testcase_1_id | 1330290648 | result_2
test_3_id        | testcase_2_id | 1330290648  | result_3

Result:
*result id | result_value | other stuff...*
result_1  |  passed      | ...
result_2  |  failed      | ...
result_3  |  failed      | ...

ParamsAndTags:( for tags I put $tag for tagParamName, $ - for case if we
have parameter with name 'tag'  )
*key (not used, but required by cassandra)| test run id | tagParamName |
value*
some key                                 |test_1_id    | $tag         |
aaa_site_test
some key                                 |test_1_id    | $tag         |
smoke
some key                                 |test_1_id    | user_role    |
admin
some key                                 |test_1_id    | miss_captcha | true
some key                                 |test_1_id    | test_name        |
login_test
some key                                 |test_1_id    |  locales          |
en           --- list is splited
some key                                 |test_1_id    |  locales          |
es           --- list is splited
some key                                 |test_1_id    |  locales          |
fr           --- list is splited
and so on...


But it's look very heavy to perform queries.
To take latest result for tag aaa_site_test and with locale es I need
perform the following steps:
Fetch all rows from ParamsAndTags with tag aaa_site_test, then fetch all
rows for param locale == es.
Then find intersection of first and second result so I receive test runs
id, but this is not the end.
After that I should fetch test runs and in result find the latest results
only.
As you can see for that simple query I should perform 3 query to DB and a
lot of work inside my application to merge results and filter latests
results.
I'am afraid it will work too slowly.
Can someone advise more nosql solution for this task?

Reply via email to