1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

WD Accèlération des recherches sur une BDD

Discussion dans 'Sujets Divers' créé par LAPIPE2018, Jan 8, 2019.

  1. LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    647
    J'aime reçus:
    227
    Bonjour,
    J'aimerais savoir, avec une base de donnée de 10000 Enregistrement, pour accèlérer les recherches par le nom ou le code ou la famille, on peut utiliser la requête (avec contient ou commence par).
    Je suis dans un réseau Wifi et je trouve(c'est un avis) que si pour chaque article, je dois exécuter une requête, ça peut faire pour un BC de 10 lignes, 10 fois la même requête. Je fais comme ça depuis 15 ans et ça marche, mais je me pose des questions.

    Etant en réseau Wifi, je pensais à l'hypothèse d'utiliser un tableau de structure en mémoire et je vais toutes mes recherches en mémoire. Dans ce cas je charge la liste des articles en memoire (CODE :10,LIBELLE : 80, FAMILLE:5,REFE: 15)
    De temps en temps je peux raffraichir la table. Comment faites vous pour réduire le nombre d'accès à la BDD ? Je précise que je fais des commandes et des Livraisons
    Bonne journée
     
    Tags:
    aminej76 apprécie ceci.
  2. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    225
    J'aime reçus:
    110
    salut,
    tu peux travailler en memoire, mais ca sous-entend que les données vont pas changer, genre le stock, sinon tes données seront fausses.
    ou alors tu devras actualiser ta structure et du coup, ca revient au debut de ton probleme, tu dois charger regulierement.

    tu as des problemes de vitesse de quel ordre?
    moi aussi j'ai des postes en wifi et aussi en cable ( et beaucoup plus d'enregistrements), le wifi est un peu plus lent, mais sans plus.
     
  3. suenodesign

    suenodesign Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    507
    J'aime reçus:
    732
    Bonsoir @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    1-Recherche Full-Text : optimiser les recherches de texte dans vos bases de données


    2- Faire appel au

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    et

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    3- Utiliser le serveur Memcached ( Version WD-WB23 et supérieur à mon avis )

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!




    Trois alternatives...

    Edité : Ajout d'une vidéo
     
    #3 suenodesign, Jan 8, 2019
    Dernière édition: Jan 9, 2019
    Gemini1961 et joker aiment ça.
  4. aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    283
    J'aime reçus:
    102
    C'est une bonne idée.
    J'ai essayé cette méthode mais ça n'as pas marché pour moi.
    Le nombre d'articles est 30 000. A l'ouverture de la fenêtre le remplissage du table par les données ( REF, DESIGNATION, STOCK, PRIX VENTE) est très lent. en utilisant un accès direct est plus rapide.
    Pour accélérer la rechercher je fais une requête de type SELECT TOP 1000 ...
    Bon dév.
     
  5. LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    647
    J'aime reçus:
    227

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    salut,
    tu peux travailler en memoire, mais ca sous-entend que les données vont pas changer, genre le stock, sinon tes données seront fausses.
    ou alors tu devras actualiser ta structure et du coup, ca revient au debut de ton probleme, tu dois charger regulierement.

    tu as des problemes de vitesse de quel ordre?
    moi aussi j'ai des postes en wifi et aussi en cable ( et beaucoup plus d'enregistrements), le wifi est un peu plus lent, mais sans plus.
    Cliquez pour agrandir...
    J'essaie d'anticipé sur les ce qui vas se passer en plein régime. Si tu fais des recherches Hlitrecherchepremier, pas de soucis, mais si tu dois faire des Hexecuterequete tous les 1 minutes, je trouve cela pas normal. Par exemple, pour saisi une commande de 10 ligne, si l'utilisateur ne connait pas les codes, il va faire les recherches sur les noms, donc éxécuter 10 fois la requête dans le réseau, si tu as 5 postes, cela fait 50 fois la même requête.
    Je me dis , que si je transfere la base en memoire, comme elle n'évolue pas beaucoup, je peux gagner en nombre de requête
     
  • LAPIPE2018

    LAPIPE2018 Active Member
    MEMBRE WX

    Inscrit:
    Fev 17, 2018
    Messages:
    647
    J'aime reçus:
    227

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonsoir @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    1-Recherche Full-Text : optimiser les recherches de texte dans vos bases de données


    2- Faire appel au

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    et

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    3- Utiliser le serveur Memcached ( Version WD-WB23 et supérieur à mon avis )

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!




    Trois alternatives...

    Edité : Ajout d'une vidéo
    Cliquez pour agrandir...
    Bonjour,
    La méthode Full-text ne réduira pas le nombre de requête, puisque je vais chercher les articles chaque fois en éxécutant la requête, et je vais toujours accèder au serveur 10 fois, en Wifi, ça peut ramer
    La méthode des Vue suppose que les critères de construction des vues sont connu d'avance,
    Les fonctions memcached risque d'être la solution probable, parce qu'elle stocke les résultats des requêtes récurrents.
    Si nous mettons en mémoire, 10000 enregistrement, en supposant que nous ayons 200 caractères en memoire, quelle taille de mémoire sera occupé pour stocé en mémoire ?
    Merci
     
  • Kill3rbko

    Kill3rbko Member

    Inscrit:
    Mar 8, 2018
    Messages:
    58
    J'aime reçus:
    21
    Salut,

    Une solution que j'utilise pour diminuer les accès à la base par requête est la suivante :

    - 1°) Uniquement des requêtes SQL sur ma base HF
    - 2°) Controle des frappes dans le champ de recherche (chaque une seconde (ou 50 ms à vous de définir en variable?) si aucune frappe/touche détectée alors je fais la requête)
    Cela permet de ne pas systématiquement lancer une requête sur chaque caractère saisi.
     
  • PhantomX

    PhantomX Member

    Inscrit:
    Juil 11, 2018
    Messages:
    78
    J'aime reçus:
    61
    Bonjour,
    Pour ma part, j'utilise un tableau de structure contenant les données à afficher, (quand les données ne varie pas beaucoup)
    Je met un hsurveille() et je récupère simplement l'enregistrement modifier

    J'utilise normal les taches parallèles pour éviter des blocages d'interfaces sur en wifi...

    Exemple :

    Code (Windev):

    HSurveille(Articles, _RaffraichitDonnee, hNumEnrTous, hsAjout+hsModification+hsSuppression+hsRaye)

    _RaffraichitDonnee(sd est une Source de Données, nNumEnr est un entier)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sd, nNumEnr)

    //  code pour raffraichir
    //...
     

    De cette manière une seule grosse requête qui prend entre 2 et 5 secondes au démarrage et ensuite tout est fluide et ne ralentit pas le reste du réseau et le hsurveille évite les aller retour inutile.

    Évidement si les données varie beaucoup, ca peut devenir pire car on va avoir des données à récupérer même si l'utilisateur en à pas besoin.

    S'il peut y avoir plusieurs enregistrement modifié en même temps, tu peux aussi mettre un Timer dans ta procédure _RaffraichitDonnee.
    Exemple : Une expédition est faite et modifie la quantité stock de 10 articles.
    Si ton hsurveille est sur ta table articles, tu vas avoir 10x ta requête relancer sur x nombre de poste.
    En mettant un timer de 1 seconde par exemple, ta requête va être lancer seulement 1x et qui va récupérée tes 10 articles modifiés.


    FinTimersys(1)

    Timersys(_RecupereDonnee, 1s, 1)


    De cette manière chaque fois que ton hsurveille te lance un signal, ton FinTimersys(1) va bloquer ton timer et ce lancera que, seulement si ça fait plus de 1 sec que tu as reçu ton dernier signal de hsurveille.


    Tu peux aussi simplement garder les numéro que le hsurveille te renvoie dans un tableau en mémoire et seulement si l'utilisateur veut visualiser un enregistrement, tu valide si l'enregistrement à été modifier dans ton tableau et seulement là tu va raffraichir cette enregistrement avant de lui afficher

    À toi de voir selon ton besoin exacte.
    En espérant que ça puisse t'aider :)
     
    aminej76 apprécie ceci.
  • aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    283
    J'aime reçus:
    102

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Si le nombre de lignes est très grand (> 100 000) la recherche devient très lourde.
    En plus, j'ai trouvé une difficulté pour faire une recherche sur la désignation (désignation contient MEUBLE , NOIR )
    Merci d'avance.
     
  • faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    411
    J'aime reçus:
    35
    Bonjour

    Est ce que la désignation est déjà est une clé ?
     
  • Partager cette page

    Chargement...