Concurrency (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Met concurrency bedoel ik hier: Hoe weet ik welke versie van een entiteit (bv. een tabel) de juiste is?

Voorbeeld

  • Opgeleverde tabellen staan in database dwh_org
  • Voor een project heb ik een bijbehorende projectdatabase, genaamd eansku
  • In eansku heb ik een tabel sku_b2 gecreëerd. Na een tijdje is deze tabel gepushed naar dwh_org
  • Nu, een maandje later wil ik verder werken met tabel sku_b2. Ik weet alleen niet zeker of ik tussentijd in eansku wijzigingen heb aangebracht. Of dat sku_b2 via een andere projectdatabase is veranderd op dwh_org. Hoe kan ik dat achterhalen?

information_schema

Systeemdatabase information_schema beschikt over enige relevante informatie:

update_time

Dit werkt, maar alleen als records daadwerkelijk zijn aangepast. Niet als een complete tabel is aangemaakt (bv. door push):

select
   update_time   # Steeds leeg?
from
   information_schema.tables
where
   table_schema="eansku"
and
   table_name="sku_b2";

create_time

Dit werkt beter:

select
   create_time
from
   information_schema.tables
where
   table_schema="eansku"
and
   table_name="sku_b2";

Tabel die gepushed is

Dit werkt: De gepushte tabel heeft als create_time de tijd van pushen.

use eansku;
call push_table("sku_b2", "sku_b2");   # Push this table to dwh_org

select
   create_time
from
   information_schema.tables
where
   table_schema="dwh_org"
   and
   table_name="sku_b2";

Tabel die aangepast is

In bovenstaande tabel heb ik een record aangepast. En dat is te detecteren:

select
   create_time,
   update_time
from
   information_schema.tables
where
   table_schema="dwh_org"
   and
   table_name="sku_b2";