Access - Linked tables - queries - PHP fetch slow

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KoenAlberts
  • Registratie: November 2008
  • Laatst online: 03-03-2023
Beste allen,

Ik heb een Access database aangemaakt voor het bekijken van onze actieve vooraad. Ik heb dit gedaan door middel van linked tables in Access.

De linked tables worden binnengehaald over een WAN-verbinding (SQL servers via ODBC / DSN less). De query's (welke lokaal in Access draaien), geven mij nu het juiste resultaat, maar het inladen van de vele duizenden records (+/- 11.000) via een PHP script (weer gelinkt aan het Access file, draait lokaal naast de access db), gaat zeer moeizaam.

Nu pas ik het volgende in mijn PHP script toe:

select * (naam van de query in Access)... Dit zorgt voor een laadtijd van >30 sec in PHP, niet handig dus.

Wanneer ik de uitkomst van de query in een tabel kopieer (zelfde aantal records), wordt deze binnen een seconde binnengehaald. Het lijkt erop alsof het PHP script, wanneer er wordt verwezen naar de query i.p.v. naar de table, alle data fetched over het WAN en de Queries op de SQL servers o.i.d. uitvoert.

Weet iemand of dit mogelijk is:

Zodra er een wijziging in één van de 'linked tables' plaats vindt, er een query in gang wordt gezet welke een lokale tabel update (dus automatisch)?!

Of is het mogelijk de data te cachen in Access oid?

Ik las ook iets over:
"Pass Through Queries", is dit misschien een oplossing voor mijn probleem?

Voorbaat dank!

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Is de query dynamisch opgebouwd? Als statisch dan zou je in Access een view kunnen maken. (Of als er bijv een dozijn mogelijke queries zijn, "gewoon" een dozijn views?)

Maar ik kan me zo voorstellen dat er ook wel een manier is om de query in access uit te voeren ipv lokaal. Een pass through query is idd misschien wat je zoekt maar dan precies andersom (IIRC gaat dat juist uit van Access als client ipv server). Dat is voor mij te lang geleden me te herinneren :P

Eerlijk gezegd: waarom Access en niet bijv MSSQL of %opensource databaseserver%? Dat lijkt me hier meer voor de hand liggen.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Tja, linked tables en query's levert mooie kleine access bestandjes op omdat er niet opgeslagen staat. Alles wordt live opgehaald.

Is er btw een reden dat je php niet direct met die servers laat praten maar dat je er access tussenzet?

Qua oplossing zou ik eerder kijken naar php-caching dan naar access-caching.

En wijzigingen doorzetten naar access lijkt me erg arbeidsintensief en foutgevoelig, zet daar een zelfde sql-server als de server neer en je kan het regelen met standaard replication. Maar dat mist in access (nouja, mist. Access is simpelweg niet de doelgroep die het nodig heeft)

Acties:
  • 0 Henk 'm!

  • KoenAlberts
  • Registratie: November 2008
  • Laatst online: 03-03-2023
Bedankt!

Hebben jullie een suggestie voor een open source replication tool oid?

Is er misschien een mogelijkheid om de table te mirroren op de één of andere manier?

[ Voor 41% gewijzigd door KoenAlberts op 21-03-2012 15:47 ]


Acties:
  • 0 Henk 'm!

  • KoenAlberts
  • Registratie: November 2008
  • Laatst online: 03-03-2023
Ik kom hier echt niet uit, wie heeft er een wijze oplossing?

Acties:
  • 0 Henk 'm!

Verwijderd

wat bedoel je met 'SQL servers' en waarom spreek je die niet rechtstreeks aan?

voor php zijn pdo-extensies beschikbaar voor bijna alle db's, inclusief MS sql server.

Acties:
  • 0 Henk 'm!

  • KoenAlberts
  • Registratie: November 2008
  • Laatst online: 03-03-2023
Verwijderd schreef op woensdag 21 maart 2012 @ 17:47:
wat bedoel je met 'SQL servers' en waarom spreek je die niet rechtstreeks aan?

voor php zijn pdo-extensies beschikbaar voor bijna alle db's, inclusief MS sql server.
De servers staan extern op verschillende locaties, wereldwijd. De servers dragen allemaal hun eigen data. Mijn Access file staat weer in een ander netwerk. De queries doen berekeningen op de data uit de verschillende servers. Hoe kan ik deze tabels actief Mirroren? Ik gebruik op het moment alleen Read-only Access via de odbc. Vanuit mijn Access file wil ik geen wijzigingen in de source data doorvoeren.

[ Voor 11% gewijzigd door KoenAlberts op 21-03-2012 18:54 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
KoenAlberts schreef op woensdag 21 maart 2012 @ 18:27:
[...]
De servers staan extern op verschillende locaties, wereldwijd. De servers dragen allemaal hun eigen data. Mijn Access file staat weer in een ander netwerk. De queries doen berekeningen op de data uit de verschillende servers. Hoe kan ik deze tabels actief Mirroren? Ik gebruik op het moment alleen Read-only Access via de odbc. Vanuit mijn Access file wil ik geen wijzigingen in de source data doorvoeren.
Afaik heb je voor actief mirroren wel een zooitje medewerking en budget nodig. Als alles MS-SQL server draait dan heb je voor mirroring alsnog een eigen MS-SQL Server nodig (oftewel budget) naast dat de andere partijen het allemaal moeten inregelen.
Heb je bijv een oracle server ertussen staan dan weet ik dat er standaard tools zijn om die te mirroren naar een andere oracle server, maar naar bijv een ms-sql server?

Wat je wel kan doen is een soort van poor man's mirroring opzetten.
- Je achterhaalt de PK's op de source servers.
- Je kopieert eenmalig de complete tabellen die je nodig hebt.
- Daarna query je de source servers qua tabellen voor alles wat na de laatste mutatie tijd gewijzigd is en je doet een insert/update query op de PK's.

Enkel moet je dit niet willen (zeker niet als het wereldwijd staat). Je krijgt namelijk allemaal NL-collega's die het fantastisch vinden, die wensen gaan hebben en meer, meer, meer willen. en dan opeens op een dag dondert het hele systeem in elkaar omdat er ergens ter wereld een dbase-tabel gewijzigd is waarvan jij niets afweet. En dan zit je een dag/week te klussen om dat bij te werken en daarna verandert de volgende tabel.

Om het omvallen tegen te gaan moet je van te voren alle wijzigingen te horen, iedereen moet van jouw systeem weten en in elke wereldwijde aanpassing / upgrade moet jouw systeem meegenomen worden in de overdenkingen / testen (anders blijf je maar achter de feiten aanfixen). Als je dat voor elkaar krijgt, dan ben je al lang het stadium van read-only gepasseerd en ondertussen heb je ook genoeg budget in je eigen beheer om zelf de server(s) te bekostigen.

Je wilt geen systeem hebben waar je elke maand een dag / week aan moet knutselen, dat kost goud geld...

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Je vraagt je zo af of 11.000+ records nuttig zijn om in php te verwerken/tonen. Als de tabel in access zelf opent, dan worden de records op de achtergrond ingeladen en kun je door naar het laatste records te springen eens kijken of het daar ook niet wat langer duurt. Is het niet mogelijk om een query te maken die alleen nuttige data oplevert? ;)

Verder ligt sql server compact voor de hand ipv acces, [google=sql server compact replication]. Of je kunt handmatig iets maken, vooral als er geen verwijderde rijen zijn enzo. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Queries op linked tables voert access afaik idd lokaal uit, maw eerst wordt de volledige tabel over de lijn getrokken en daar gaat de query overheen. Een ptq werkt idd op de server, maw access verstuurt de query en haalt alleen het resultaat op. Over een wanverbinding kan een ptq bij grote tabellen en kleine queryresultaten kan een forse slok op een borrel schelen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • KoenAlberts
  • Registratie: November 2008
  • Laatst online: 03-03-2023
Een oplossing zou zijn een copy paste tabel zijn.

Linked table --> local table temp --> delete local table --> rename local table temp to local table.
Dit d.m.v. een vba script oid. Maar dit doe ik liever niet.


Onderstaande oplossing lijkt mij een stuk beter.

ODBC IN --> Linked Table to LocalTable (kept synchronoes) --> ODBC out --> Access ODBC IN (linked table).

Heeft iemand een idee voor het bovenstaande. Op deze manier zal php verbinden met access en de queries fetchen via de synchronoes table oplossing.

Bestaat zo'n dergelijk programma'tje/script/oplossing?

[ Voor 7% gewijzigd door KoenAlberts op 22-03-2012 14:29 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Als er geen wijzigingen gepublished worden (zie mijn link) dan is dat synchroniseren technisch zowat onmogelijk (tenzij je gewoon de hele dataset steeds opnieuw binnenhaalt iedere x tijd). Als je wel wijzigingen kan (laten) publiseren, zie dan mijn bovenstaande link naar oa MSDN: Implementing Replication (SQL Server Compact) ;) Compact edition kun je als de opvolger van Access zien voor dit soort applicaties, zie niet in waarom je Access zou willen.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • KoenAlberts
  • Registratie: November 2008
  • Laatst online: 03-03-2023
pedorus schreef op donderdag 22 maart 2012 @ 14:39:
Als er geen wijzigingen gepublished worden (zie mijn link) dan is dat synchroniseren technisch zowat onmogelijk (tenzij je gewoon de hele dataset steeds opnieuw binnenhaalt iedere x tijd). Als je wel wijzigingen kan (laten) publiseren, zie dan mijn bovenstaande link naar oa MSDN: Implementing Replication (SQL Server Compact) ;) Compact edition kun je als de opvolger van Access zien voor dit soort applicaties, zie niet in waarom je Access zou willen.
Wat access doet, is op een interval van 5 sec een refresh op de ODBC, er moet toch een oplossing zijn om elke 5 seconde een exacte kopie van een specifieke table te clonen en alleen data te wijzigen in de local table indien nodig?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Qua bandbreedte zou dat toch wel tamelijk inefficiënt zijn... Dat betekend dat je iedere 5 seconden 11.000+ rijen moet ophalen ofzo. Voor de kosten van het benodigde uplink en de extra overhead op de server kun je vast echte synchronisatie bekostigen. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1