J'essaye de déterminer comment concevoir au mieux une installation de stockage pour la recherche rapide du texte.Table consultable - Que feriez-vous?
- Il y aura un format de fichier différent pour chaque client
- Ces fichiers sont XML et les noms de champs et les attributs ne sont pas standard, et ne suivent pas un schéma
- Le client a la possibilité de choisir certains champs peuvent être recherchés
Il peut y avoir 100 000 enregistrements par fichier, par client.
Je suis en train de traiter ces fichiers et de générer une table basée sur les colonnes spécifiées par la configuration du client.
Quel type de schéma de base de données choisiriez-vous, qu'il s'agisse de fichiers SQL, de fichiers plats ou de toute autre technologie?
Il va y avoir beaucoup de lignes à chercher, et je ne sais pas quel est le meilleur moyen d'y parvenir.
Créer une table appelée SearchColumns
Id
CustomerId
DisplayValue
Créer une table appelée "SearchRecords"
Id
SearchColumnId
SearchText
Avec ce scénario, la table SearchRecords va devenir très grand, très rapide, et parce que SearchText va être varchar (200), les requêtes LIKE vont être incroyablement lent.
J'ai également pris en compte la recherche de texte intégral dans la table SearchRecords, mais lors d'un test sur un exemple de table, je n'obtiens pas de résultats comme je l'aurais souhaité. J'ai aussi considéré des bases de données séparées par client Cela aidera à la taille de la table à court terme, mais après des mois ou des années, la taille et la vitesse de la table vont être plus lentes. Que feriez-vous pour créer une table de recherche rapide, qui pourrait potentiellement contenir des millions d'enregistrements?
Edit: Les informations concernant les données que je suis le stockage:
Je tire des valeurs telles que FullName, adresse et numéros de compte à partir du fichier xml. Ces champs sont assez petits et n'atteindraient probablement jamais plus de 200 caractères.
Il ne va y avoir qu'une colonne dans la base de données appelée "SearchText" Cela ne va pas être des données XML, mais plutôt des données extraites d'un champ xml. J'espère que cela a aidé à clarifier les choses un peu. –