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?