Ankieta z wieloma "ścieżkami" i zależnościami - sql czy no-sql?

Muszę zrobić dosyć zaawansowaną ankietę, z dosyć złożonymi zależnościami pomiędzy polami np. jeżeli odp. A to przeskocz do pyt. 10 a później 12, jeżeli w pyt. 1 wybrałeś B to wczytaj praktycznie inny zestaw pytań.

Po pierwsze - istnieją jakieś sprytne sposoby podejścia do takiego problemu? Tutoriale? Gemy?
Po drugie - jak składować dane (na ich podstawie mają później być generowane statystyki) skoro zestawy odpowiedzi będą znacząco się od siebie różnić. Dobrym pomysłem będzie tu użycie którejś z baz no-sql (MongoDB?)?

Wielkie dzięki za każdą pomoc :wink:

Absolutnie bez złośliwości: jeśli nie masz pomysłu na zamodelowanie tego w bazie nierelacyjnej, a noSQL kojarzysz głównie z bazami dokumentowymi (jak wspomniane MongoDB), to zrób to normalnie w bazie relacyjnej (czyli yesSQL :wink: ).

Absolutnie bez obrażania (:D): spoko, myślałem, że MongoDB (który bardziej mi tu pasował niż jakieś BigTable czy HBase) zabłyśnie w takim zastosowaniu.

Jakbys musial zrobic 10k insertow w ciagu sekundy do bazy to wtedy tak

Użyj madeleine : http://andrzejonsoftware.blogspot.com/2011/05/madeleine-with-rails.html

Mam bardzo duże opory przed poleceniem średniozaawansowanemu programiście bazy danych wkraczającej dopiero w wiek niemowlęcy, której żaden znany mi programista nie wdrożył produkcyjnie.

zlw, zrób to w bazie relacyjnej, a kiedy już skończysz projekt i oddasz zlecenie możesz sobie w ramach gimnastyki spróbować wymienić backend bazodanowy na jakiś bardziej odjechany. Jeśli w tym projekcie masz coś takiego jak termin albo robisz go za kasę, potrzebną do zapłacenia przysłowiowych rachunków, to nie jest pora na eksperymenty na tak grząskim gruncie jak alternatywne bazy danych.

Jakbys musial zrobic 10k insertow w ciagu sekundy do bazy to wtedy tak[/quote]
Jakby tylko ilość insertów na sekundę się liczyła, to wszyscy by się przerzucili na redisa czy coś podobnego.

Nie rozumiem co mają skojarzenia związane z bazami noSQL do przydatności mongodb przy modelowaniu jakiegoś konkretnego przypadku.

zlw: moim zdaniem powinieneś poczytać o bazach, które Twoim zdaniem mogą się do tego zadania nadawać (mongo, couchdb) i spróbuj zamodelować Twój problem w 2 wersjach - sam ocenisz na ile będą skomplikowane.

Nie rozumiem co mają skojarzenia związane z bazami noSQL do przydatności mongodb przy modelowaniu jakiegoś konkretnego przypadku.[/quote]
Dlatego że koledze mogłyby się tutaj przydać, może i nawet bardzo, bazy grafowe. Ale to chyba trochę za wcześnie, jeśli o ich istnieniu ma się dowiedzieć dopiero z forum i mając do zrobienia już-teraz konkretny projekt.

Jakbys musial zrobic 10k insertow w ciagu sekundy do bazy to wtedy tak[/quote]
Jakby tylko ilość insertów na sekundę się liczyła, to wszyscy by się przerzucili na redisa czy coś podobnego.[/quote]
W niektorych projektach wlasnie to sie liczy i nie zawsze redis jest najlepszym wyjsciem

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

http://blog.axant.it/archives/236 wlasnie to znalazlem ciekawe porownanie

Bazy grafowe to miał być drugi strzał gdyby dokumentowe nie dały rady :smiley:

Nigdy nie używałem baz no-sql (jedynie minimalna wiedza teoretyczna), więc rzeczywiście bez sensu na nie teraz napierać. Problem w tym, że średnio mam pomysł jak to rozwiązać w relacyjnej bazie danych, żeby było to maksymalnie elastyczne - tzn. żeby dodanie gdzieś jednego pytania czy odpowiedzi nie rozpieprzyło całej zdefiniowanej “ścieżki”.

No dobra, strzelałem, ze redis jest szybszy, mniejsza o szczegóły. Chodziło mi o to, że jeżeli ktoś pyta o zastosowanie noSQLowej bazy danych ze względu na skomplikowany model danych, bez ani jednego słowa o wydajności, to ilość insertów na sekundę ma prawdopodobnie dużo mniejsze znaczenie. Chciałem też trochę powalczyć z mitem, że jeżeli ma być szybko to stosujemy noSQL - są różne kryteria wyboru bazy danych.

Nie wiem czemu jeżeli się dowiesz o bazach grafowych z forum, to nie powinieneś tego stosować :wink: Rozumiem, że różne bazy mają różne bariery wejścia i można się przejechać na wyborze jak się później okaże, że to jednak nie to, ale nigdzie w pytaniu nie widziałem nic o tym jaki jest deadline, więc nie zakładajmy od razu, że projekt jest na wczoraj i nie ma czasu na sprawdzenie różnych rozwiązań.

Może to jest czepiania się słówek (a może nie) ale jeśli musisz zrobić jedną zaawansowaną ankietę, to może warto by całą logikę poruszania się po niej zawerzeć w kodzie a nie w bazie danych ? Jeśli to nie ma być jakiś uniwersalny soft (builder ankiet) to może to jest rozwiązanie? A na bazie tylko zapisywać odpowiedzi per pytanie bez tych całych “zależności” ?

Nie musi to być jakiś super uniwersalny soft, ale firma będzie takie ankiety raz na jakiś czas przeprowadzać. Dobrze byłoby więc nie pisać tego za każdym razem od zera.

Jeżeli na nic mądrzejszego nie wpadnę to jest to też oczywiście jakieś wyjście :wink: