Rabbits köer finns i minnet och kommer därför att vara mycket snabbare än att implementera detta i en databas. En (bra) dedikerad meddelandekö bör också tillhandahålla väsentliga körelaterade funktioner som strypning/flödeskontroll, och möjligheten att välja olika routingalgoritmer, för att nämna ett par (kanin tillhandahåller dessa och mer). Beroende på storleken på ditt projekt kanske du också vill att meddelandet som skickar komponenten separeras från din databas, så att om en komponent utsätts för stor belastning behöver den inte hindra den andras funktion.
När det gäller problemen du nämnde:
-
omröstning håller databasen upptagen och ger dåliga resultat :Med Rabbitmq kan producenter pusha uppdateringar till konsumenter som är mycket mer presterande än polling. Data skickas helt enkelt till konsumenten när det behövs, vilket eliminerar behovet av slösaktiga kontroller.
-
låsning av bordet -> igen lågpresterande: Det finns inget bord att låsa :P
-
miljontals rader med uppgifter -> igen ger omröstningen låg prestanda: Som nämnts ovan kommer Rabbitmq att fungera snabbare eftersom det finns i RAM och ger flödeskontroll. Om det behövs kan den också använda disken för att tillfälligt lagra meddelanden om den får slut på RAM. Efter 2.0 har Rabbit förbättrat sin RAM-användning avsevärt. Klustringsalternativ är också tillgängliga.
När det gäller AMQP skulle jag säga att en riktigt cool funktion är "börsen" och möjligheten för den att dirigera till andra börser. Detta ger dig mer flexibilitet och gör att du kan skapa ett brett utbud av utarbetade routingtypologier som kan vara väldigt praktiska vid skalning. För ett bra exempel, se:
(källa:springsource.com)
och:http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/
Slutligen, när det gäller Redis, ja, det kan användas som en meddelandeförmedlare och kan göra det bra. Rabbitmq har dock fler meddelandeköfunktioner än Redis, eftersom rabbitmq byggdes från grunden för att vara en dedikerad meddelandekö på företagsnivå med alla funktioner. Redis å andra sidan skapades i första hand för att vara en nyckel-värdebutik i minnet (även om den gör mycket mer än så nu, den kallas till och med för en schweizisk armékniv). Ändå har jag läst/hört många människor uppnå bra resultat med Redis för mindre projekt, men jag har inte hört mycket om det i större applikationer.
Här är ett exempel på Redis som används i en chattimplementering med lång omröstning:http://eflorenzano.com/blog/2011/02/16/technology-behind-convore/