2011-01-25 2 views
0

J'utilise des rails et j'ai le scénario suivant: Les utilisateurs ont beaucoup de listes et chaque liste contient un nombre de mots avec chaque mot ayant sa propre définition. La vue de liste montre tous les mots paginés par des multiples de 30. Je suis inquiet que la liste de b/ca puisse avoir plus de 4000 mots et cela semble être trop coûteux pour la base de données de paginer si la liste doit être commandée alphabétiquement. Je me demande quel est le moyen le plus rapide de le faire. Peut-être ajouter un index sur le mot?Stocker un grand nombre d'objets appartenant à une liste

J'ai envisagé d'enregistrer une chaîne dans la liste qui contient tous les mots de la liste séparés par un espace. Je pourrais alors faire un split ("") sur cette chaîne et utiliser la pagination sur ce tableau, mais ensuite j'ai besoin d'utiliser des expressions régulières pour ajouter et supprimer des mots de cette liste avec un objet word save.

J'ai également considéré une sorte de magasin de valeur-clé comme le coffret de tokyo. Il semble qu'un index B-Tree pourrait fonctionner.

+0

Oui, utilisez un index. Alors il n'est pas plus cher de retourner la première page de trente ou le centième. –

Répondre

0

Indexez-le! C'est de loin la meilleure option, et comme Mark Thomas l'a dit, il vous donnera 30 mots consécutifs tout aussi rapidement qu'il vous donnera les 30 premiers. Il suffit de lancer un :order et un :limit et vous êtes bon à allez - ou, mieux encore, laissez un plug-in comme will_paginate le faire pour vous. La chaîne de mots est une approche plutôt désordonnée - vous devez reconstruire la chaîne chaque fois que vous ajoutez ou supprimez des mots, et les recherches de travail doivent utiliser des fonctions de comparaison lentes comme LIKE ou REGEX. Tokyo (maintenant Kyoto) Cabinet peut ne pas être assez polyvalent pour ce dont vous avez besoin - il prétend être un magasin clé -> valeur, et vous pourriez avoir besoin de plusieurs clés -> valeur, dont je ne suis pas sûr qu'il supporte. D'ailleurs, pourquoi ajouter une autre DB quand vous en avez déjà une?

tl; dr INDEX!

Espérons que cela aide!

Questions connexes