Aider à éliminer la corruption dbf


Aider à Éliminer les DBF Corruption avec un Moteur d'enregistrement

FoxTalk 1999

le droit d'Auteur Pinnacle Publishing, Inc. Tous droits réservés.Aider à Éliminer les DBF Corruption avec un Moteur d'enregistrement
Steve Zimmelman


Le fichier DBF a été avec nous depuis environ 15 ans, et bien que j'aime vraiment l'architecture ouverte de la structure, là & #39 s toujours été un problème inhérent à l'Indice de corruption de données-en particulier dans un environnement de réseau. Le problème semble être avec la quantité de données & #39 s transmis en haut et en bas le câble réseau. Couple cela avec plusieurs utilisateurs, et il n' & #39 t prendre longtemps à la pop un index. D'autre part, les systèmes semblent être beaucoup plus stable et ne & #39 t présentent le même niveau de corruption que leur réseau cousins. Une seule solution, souvent utilisé par les développeurs (moi y compris), a été à Réindexer ou recréer les fichiers d'index lorsqu'un indice d'erreur liées dresse sa tête. Mais cela peut devenir ingérable quand les ensembles de données de commencer à l'approche de la quatre millions d'enregistrement de marque. Une solution à long terme serait de forcer l'application multi-utilisateur à se comporter comme un système mono-utilisateur, par le développement de ce & #39 s devenu connu comme un moteur d'enregistrement.

La théorie derrière le moteur d'enregistrement est en fait assez simple. L'
règle fondamentale est de ne jamais permettre à l'utilisateur de poster quoi que ce soit directement à la table partagée. Au lieu de cela, les messages de l'utilisateur pour une ombre-table. Après l'ombre-table est remplie et pas d'erreurs ont eu lieu au cours de l'après, l'application passe une directive à l'affichage du moteur, qui en substance dit le moteur de ce qu'il & #39 s censé faire. Dans ce cas, il met à jour la table principale de données dans l'ombre de table. Donc, ce que & #39 s qui se passe en réalité, c'est que le moteur d'enregistrement, ou d'un seul poste de travail, est la seule à poster à la table principale. C'est exactement ce qu'est un système mono-utilisateur.

Anatomie d'un moteuren Plus de l'affichage des moteurs I & #39 ai vu sont en mesure de traiter une variété de demandes à l'aide d'une table pour recevoir ses directives. Une directive simple table peut avoir une structure comme ceci:

FieldFieldNameTypeSize
1IDCharacter10
2PROGRAMCharacter50
3PARAMSCharacter60
4SHADOWTABLCharacter50
5DATEREQESTDate8
6DATEDONEDate8
7START_TIMECharacter8
8END_TIMECharacter8
9DONELogical1
10USERIDCharacter5

Le moteur se trouve dans une boucle et recherche les enregistrements où le Fait de champ est Faux. Quand il en voit un, il va commencer à le traiter en utilisant les informations stockées dans le dossier.

Par exemple, supposons & #39 s dire qu'une application a besoin de mettre à jour un client & #39 s inscrire. L'application permettrait d'obtenir une copie de l'enregistrement et de le stocker dans une ombre de table. Après que l'utilisateur effectue des modifications, il ou elle clique sur le Post ou le bouton de validation, et l'application écrit un enregistrement à la directive de la table. Le code pourrait ressembler à quelque chose comme ceci:

* & Copie enregistrement client à l'ombre de table
* & pour l'édition.
*

Sélectionnez la Clientèle
Si Chercher(m.CustNo)
cTempTable = & #39 Temp & #39 Droit(Sys(3),4) & #39 .dbf & #39
Copie À m.cTempTable)
Alors que le Client.CustNo=m.CustNo
Endif

*
* & Lorsque l'édition est terminée, ajouter un enregistrement à la
* & Directive sur le Détachement de la Table.
*

Insérer Dans la Directive
(ID,Programme,Parms,ShadowTabl,
DateReqest,UserID,en Fait)
les Valeurs (SYS(2015), & #39 CustUpDt.fxp & #39 ,
m.CustNo,m.cTempTable,Date(),m.Nom d'utilisateur.F.)

Lors de l'affichage du moteur voit le dossier, il commence à traiter le dossier à quelque chose comme ceci:

Si la Chercher.F., & #39 Directiv & #39 )

Remplacer Directiv.Start_Time Avec Time()

Si ! Vide(Directiv.ShadowTabl)
Si le Fichier(Directiv.ShadowTabl)
Utilisation (Directiv.ShadowTabl) Alias l'Ombre À 0
Endif
Endif
Si ! Vide(Directiv.Programme) Et
Fichier(AllTrim(Directiv.Programme))
Si ! Vide(Directiv.Parms)
pParms = Directiv.Parms
Ne (Directiv.Programme) Avec pParms
Else
Ne (Directiv.Programme)
Endif
Endif

*
* & fermeture de l'ombre-table.
*

Si elle est Utilisée( & #39 Ombre & #39 )
Utilisation Dans l'Ombre
Endif

*
* & mise à Jour de la Directive sur la table.
*

Sélectionnez Directiv
Remplacer .T.,
DateDone Avec Date(),
End_Time Avec Time()

Endif

Le moteur peut être invisible ou visible de l'application. Je préfère un visible du moteur afin que je puisse contrôler le moteur & #39 s progrès si nécessaire.

L'utilisation d'un moteur d'enregistrement est évidemment pas pour les installations de petite taille, et il nécessite un peu de réingénierie. Mais pour les grandes installations où l'intégrité des données doit être assuré, il pourrait être le chemin à parcourir.









Aider a eliminer la corruption dbf


Aider a eliminer la corruption dbf : Plusieurs milliers de conseils pour vous faciliter la vie.


Aider a Eliminer les DBF Corruption avec un Moteur d'enregistrement

FoxTalk 1999

le droit d'Auteur Pinnacle Publishing, Inc. Tous droits reserves.Aider a Eliminer les DBF Corruption avec un Moteur d'enregistrement
Steve Zimmelman


Le fichier DBF a ete avec nous depuis environ 15 ans, et bien que j'aime vraiment l'architecture ouverte de la structure, la & #39 s toujours ete un probleme inherent a l'Indice de corruption de donnees-en particulier dans un environnement de reseau. Le probleme semble etre avec la quantite de donnees & #39 s transmis en haut et en bas le cable reseau. Couple cela avec plusieurs utilisateurs, et il n' & #39 t prendre longtemps a la pop un index. D'autre part, les systemes semblent etre beaucoup plus stable et ne & #39 t presentent le meme niveau de corruption que leur reseau cousins. Une seule solution, souvent utilise par les developpeurs (moi y compris), a ete a Reindexer ou recreer les fichiers d'index lorsqu'un indice d'erreur liees dresse sa tete. Mais cela peut devenir ingerable quand les ensembles de donnees de commencer a l'approche de la quatre millions d'enregistrement de marque. Une solution a long terme serait de forcer l'application multi-utilisateur a se comporter comme un systeme mono-utilisateur, par le developpement de ce & #39 s devenu connu comme un moteur d'enregistrement.

La theorie derriere le moteur d'enregistrement est en fait assez simple. L'
regle fondamentale est de ne jamais permettre a l'utilisateur de poster quoi que ce soit directement a la table partagee. Au lieu de cela, les messages de l'utilisateur pour une ombre-table. Apres l'ombre-table est remplie et pas d'erreurs ont eu lieu au cours de l'apres, l'application passe une directive a l'affichage du moteur, qui en substance dit le moteur de ce qu'il & #39 s cense faire. Dans ce cas, il met a jour la table principale de donnees dans l'ombre de table. Donc, ce que & #39 s qui se passe en realite, c'est que le moteur d'enregistrement, ou d'un seul poste de travail, est la seule a poster a la table principale. C'est exactement ce qu'est un systeme mono-utilisateur.

Anatomie d'un moteuren Plus de l'affichage des moteurs I & #39 ai vu sont en mesure de traiter une variete de demandes a l'aide d'une table pour recevoir ses directives. Une directive simple table peut avoir une structure comme ceci:

FieldFieldNameTypeSize
1IDCharacter10
2PROGRAMCharacter50
3PARAMSCharacter60
4SHADOWTABLCharacter50
5DATEREQESTDate8
6DATEDONEDate8
7START_TIMECharacter8
8END_TIMECharacter8
9DONELogical1
10USERIDCharacter5

Le moteur se trouve dans une boucle et recherche les enregistrements ou le Fait de champ est Faux. Quand il en voit un, il va commencer a le traiter en utilisant les informations stockees dans le dossier.

Par exemple, supposons & #39 s dire qu'une application a besoin de mettre a jour un client & #39 s inscrire. L'application permettrait d'obtenir une copie de l'enregistrement et de le stocker dans une ombre de table. Apres que l'utilisateur effectue des modifications, il ou elle clique sur le Post ou le bouton de validation, et l'application ecrit un enregistrement a la directive de la table. Le code pourrait ressembler a quelque chose comme ceci:

* & Copie enregistrement client a l'ombre de table
* & pour l'edition.
*

Selectionnez la Clientele
Si Chercher(m.CustNo)
cTempTable = & #39 Temp & #39 Droit(Sys(3),4) & #39 .dbf & #39
Copie A m.cTempTable)
Alors que le Client.CustNo=m.CustNo
Endif

*
* & Lorsque l'edition est terminee, ajouter un enregistrement a la
* & Directive sur le Detachement de la Table.
*

Inserer Dans la Directive
(ID,Programme,Parms,ShadowTabl,
DateReqest,UserID,en Fait)
les Valeurs (SYS(2015), & #39 CustUpDt.fxp & #39 ,
m.CustNo,m.cTempTable,Date(),m.Nom d'utilisateur.F.)

Lors de l'affichage du moteur voit le dossier, il commence a traiter le dossier a quelque chose comme ceci:

Si la Chercher.F., & #39 Directiv & #39 )

Remplacer Directiv.Start_Time Avec Time()

Si ! Vide(Directiv.ShadowTabl)
Si le Fichier(Directiv.ShadowTabl)
Utilisation (Directiv.ShadowTabl) Alias l'Ombre A 0
Endif
Endif
Si ! Vide(Directiv.Programme) Et
Fichier(AllTrim(Directiv.Programme))
Si ! Vide(Directiv.Parms)
pParms = Directiv.Parms
Ne (Directiv.Programme) Avec pParms
Else
Ne (Directiv.Programme)
Endif
Endif

*
* & fermeture de l'ombre-table.
*

Si elle est Utilisee( & #39 Ombre & #39 )
Utilisation Dans l'Ombre
Endif

*
* & mise a Jour de la Directive sur la table.
*

Selectionnez Directiv
Remplacer .T.,
DateDone Avec Date(),
End_Time Avec Time()

Endif

Le moteur peut etre invisible ou visible de l'application. Je prefere un visible du moteur afin que je puisse controler le moteur & #39 s progres si necessaire.

L'utilisation d'un moteur d'enregistrement est evidemment pas pour les installations de petite taille, et il necessite un peu de reingenierie. Mais pour les grandes installations ou l'integrite des donnees doit etre assure, il pourrait etre le chemin a parcourir.


Aider à éliminer la corruption dbf

Aider à éliminer la corruption dbf : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation