Min idé är att skapa ett system baserat på en databas över animes. <b>Hur skulle databasen/tabellerna byggas upp?</b> Tack för det utförliga svaret! Jag har inte riktigt greppat allt du sa men kommer nog göra det om jag läser igenom det några gånger till. Det verkar inte alls så krångligt som jag hade trott att det skulle vara.Anime databas med avancerad(?) söklogik.
Den skulle fungera så att samtidigt som användarna använder sidan för att leta efter anime så skulle de även bidra till sidan genom att deras sökning kan användas för att precissera andras sökningar.
Det skulle alltså gå till så att besökaren får välja sina favoritanimes och baserat på dem så ska andra animes listas. Det som ska avgöra vilka animes som listas är hur andra har gjort sökningar.
Om Bertil skriver i att han gillar "Naruto", "Bleach" och "Dragon ball" så ska applikationen alltså titta i databsen vilka andra som har letat efter dessa samt vad mer än bara dom som har sökts efter i samma sökning.
Så tidigare har lisa letat på "Naruto", "Bleach", "Dragon ball" och "Death Note"
och Kalle har letat på "Naruto", "Bleach", "Death Note" och "Elfen Lied"
Då ska den alltså titta på de tidigare sökningarna och bestämma vilka som verkar ha samhörighet.
Resultatet på Bertils sökning skulle alltså bli "Death Note" först eftersom den matchade 2 gånger och sedan "Elfen Lied" som endast matchade en gång.
Det här skulle kräva väldigt mycket tanke på logiken, om endast en anime matchar de 2 sökningarna så ska ju den ha lägre prioritet än en där 3 matchar.
Vet inte om jag uttryckt mig tydligt nog nu men tanken är att personer som har många animes gemensamt kan använda det här systemet och indirekt genom andra personer hitta sådana animes som de kan tänkas gilla.
Språket skulle vara ASP.NET med en MySQL databas eftersom det är de jag känner mig mest hemma med.
Sidan ska inte kräva någon typ av inloggning men möjligtvis måste besökarens IP eller en cookie sparas för att det inte ska bli dublettsökningar i databasen. Inget större problem om det blir det men skadar ju inte att undvika.
Nu är mina frågor..
Hur skulle databasen/tabellerna byggas upp?
Är det prestandamässigt möjligt? Kommer dte behövas någon typ av superserver för att hålla igång något sådant?
Hur får man igång en sån här sak där användarnas data är en nödvändig del för att applikationen ska rulla på.
Om det kommer en ny anime är det lätt hänt att den hamnar långt bak i listan, är det kanske en bra idé att ta bort gamla sökningar?Sv: Anime databas med avancerad(?) söklogik.
Jag tror att det bästa faktiskt är att börja med en enkel:
-AnimeSeries
Name
Id
-Persons
Id
-Preferences
PersonId
SeriesId
Det du pratar om låter snarlikt vector space model inom sökmotorprogrammering, men med en twist.
Grundprinciperna måste ju vara:
1. En person som har många favoriter har mindre betydelse än någon som har väldigt få.
2. En person som har dålig matchning har mindre betydelse än någon som har bra matchning. Det borde helt enkelt vara en procentsats som avgör matchingen.
Jag tror att du får fram det genom att använda "antalet gemensamma serier"/"totalt antal serier tillsammans", eller "antalet gemensamma"/"antalet av den andras serier".
Problemet är att detta är ganska krångliga frågor mot databasen, sannolikt antingen använd av cross-product eller någon join, och på så sätt räkna ut alla på en gång, något i stil med:
SELECT ... FROM Preferences p1, Preferences p2 WHERE (NOT p1.PersonID = p2.PersonID)
Eller
SELECT ... FROM Preferences p1 OUTER JOIN Preferences p2 ON p1.SeriesID = p2.SeriesID WHERE (NOT p1.PersonID = p2.PersonID)
Vid närmare eftertanke är det nog enklast. Då får du ut alla kombinationer du är intresserad av. Sen får du "helt enkelt" göra en group by som uppfyller en av algoritmerna ovan, kanske något i stil med:
X = SELECT * FROM Preferences p1 OUTER JOIN Preferences p2 ON p1.SeriesID = p2.SeriesID WHERE (NOT p1.PersonID = p2.PersonID)
Y = SELECT COUNT(*) as c1,p1.personid, p2.personid FROM X WHERE NOT(p1.seriesID = NULL OR p2.seriesID =NULL) GROUP BY p1.personid, p2.personid
För att få fram alla matchningar, och sen för totala gemensamma:
Z = SELECT COUNT(*) as c2, p1.personid, p2.personid FROM X GROUP BY p1.personid, p2.personid
Och sen slutlig lösning från:
SELECT c1/c2, p1.personid, p2.personid FROM Y INNER JOIN Z ON Y.p1.personid=Z.p1.personid, Y.p2.personid=Z.p2.personid
c1/c2 är då "Hur mycket bryr p1 sig om p2" och vice versa.
Sen får du ha denna som en faktor när du räknar ut de olika alternativen.
<b>>Är det prestandamässigt möjligt? Kommer dte behövas någon typ av superserver för att hålla igång något sådant?</b>
Helt klart ett stort jobb, men beroende på databas kan du ju antingen låta den cachas automatiskt, eller göra det själv vid tillfällen.
<b>>Hur får man igång en sån här sak där användarnas data är en nödvändig del för att applikationen ska rulla på.</b>
Genom att få in entusiaster som ger sig fan på att få det att funka, och genom att tillhandahålla något som får folk att vilja komma in från början.
<b>>Om det kommer en ny anime är det lätt hänt att den hamnar långt bak i listan, är det kanske en bra idé att ta bort gamla sökningar?</b>
Du kan ju ha en "nyhetsfaktor" som gör att nyheter alltid viktas högt, säg 1+k/antalet dagar sen den introducerades.
Där sätter du k till ett tal som är i storleksordningen "nu är den inte så ny längre", kanske någon månad eller så?Sv:Anime databas med avancerad(?) söklogik.
Tack igen för svaret!