Het beschreven resultaat is vanuit de software Data Replicator ook het gewenste resultaat.
Het gaat over de tabel SystemDivisions
op Exact Online die gerepliceerd wordt op SQL Server.
Verticaal Filteren op Administraties
Allereerst dat er 198 rijen in plaats van enkel de gekozen administraties bij use
.
De tabel SystemDivisions
is niet-gepartitioneerd, wat betekent dat de inhoud altijd hetzelfde is, onafhankelijk van of en hoeveel administraties gekozen zijn. Op de Exact Online PDF Poster is hierover op de rechterzijde meer te lezen betreffende het verschil tussen gepartitioneerde en niet-gepartitioneerde data.
Merk op dat Exact Online daarnaast nog eens tabellen kent die per Exact Online abonnement een andere inhoud hebben, zoals Users
en MailMessagesReceived
. Er is voor gekozen om die per partitie te herhalen, ook al kan een abonnement meerdere partities (administraties) bevatten. Als de unieke gegevens per abonnement nodig zijn in dit geval, dan kan dat bijvoorbeeld met:
use
select min(code)
from systemdivisions
where status = 1 /* Active. */
group
by customercode
select ...
Horizontaal Filteren
Er zal automatich een replica gemaakt worden als een query afgevuurd wordt op een tabel en Invantive Data Replicator is actief. De replica is (bewust) volledig: alle rijen van alle gekozen partities (Exact Online: administraties) en alle kolommen worden opgehaald en gerepliceerd naar SQL Server.
Alle kolommen worden opgeslagen in de replica, ook als een SQL query enkel één kolom ophaalt.
Het idee er achter is dat als een volgende Invantive SQL query andere kolommen nodig heeft deze reeds aanwezig zijn. De prestaties van het repliceren worden in het algemeen niet beinvloedt door het aantal kolommen (procenten langzamer), maar enkel door het aantal rijen (pro rata langzamer).
Als echt specifiek maar een deel van de kolommen gewenst zijn, dan kan gewerkt worden met een tussenstap zoals:
--
-- Maak in-memory kopie van de gewenste data.
--
create or replace table mytable@inmemorystorage
as
select /*+ ods(false) */ code
from exactonlinerest..journals
where code = '10'
--
-- Tel de rijen, maar wissel met de ods-hint
-- het standaard replicatiegedrag van de in-memory
-- database naar WEL repliceren.
--
select /*+ ods(true, interval '0 seconds') */
count(*)
from mytable@inmemorystorage
Echter, deze tussenstap zorgt er wel voor dat het repliceren niet meer per partite afzonderlijk gebeurt. Nadeel daarvan is dat alle partities (administraties) tegelijk verwerkt worden en als er één faalt (bijvoorbeeld door een betalingsachterstand van een zelfboekende ondernemer), dat ze dan allen falen.
Meer informatie over de ods
-hint is te vinden op Invantive SQL Grammar v22.1.