2010-10-08 29 views
0

J'essaie de comprendre quel type de fichier binaire peut prendre en charge mes besoins d'index inverse. Disons que j'ai un document que je peux identifier avec un identifiant unique et que chaque document peut avoir 360 valeurs fixes dans une plage de 0-65535. Quelque chose comme ceci:Format binaire à index inverse

Document0: [1, 10, 123, ...] // 360 valeurs

Document1: [1, 10, 345, ...] // 360 valeurs

maintenant, l'indice inverse est facile - je peux créer pour chaque liste de valeurs possibles des documents qui contient, et requête peut être exécutée rapidement, par exemple:

1: [Document0 Document1]

10: [Document0, Document1 ]

123: [Document0]

345: [Document1]

Mais je veux stocker un grand nombre de documents dans une sorte de fichier (binaire) et d'avoir la capacité d'interroger rapidement, mais aussi d'ajouter de nouveaux documents sans recréer toute la structure.

Maintenant, j'ai du mal à organiser ce fichier. Si je veux un accès rapide, j'ai besoin de tableaux de documents de longueur fixe pour faire la recherche de fichiers et de lire. Mais la taille fixe signifie que j'aurai beaucoup d'espaces vides pour la liste des documents. Ma seule idée est d'avoir une sorte de système de seau et chaque valeur peut appartenir à un seau de taille spécifique, par ex. il y a des seaux de taille 1, 2, 4, 8, 16, 32, ... (ou quelque chose comme ça) et j'ai besoin d'une sorte d'en-tête qui me pointe où commence le seau et la taille du seau. Cette idée permettra d'optimiser la taille du magasin, mais encore une fois j'ai des problèmes avec l'ajout de nouveaux documents.

Une idée de comment organiser mon fichier 'index inverse'?

Meilleur.

Répondre

0

Je choisirais 65536 fichiers ayant chacun l'ID des documents. Si vous voulez aller doucement sur le système de fichiers, divisez-le en 256 répertoires ayant 256 fichiers chacun.

00\00.idx 
00\01.idx 
.. 
FF\FF.idx 
0

Cela semble bien. Je suis en train de lire très vite, les écritures sont plus lentes - je dois m'assurer que chaque fichier contient un document unique (pour l'instant je dispose d'un modèle simple pour stocker un nombre constant de fichiers en mémoire, et les vider disque lorsqu'un seuil est atteint). Merci pour la réponse.