November 13th, 2018

Метамоделирование: часть 1

Число таблиц в базе данных стало зашкаливать. Было принято жёсткое решение — не позволять их числу расти. И тут приходят на помощь метамодели. Есть всякие. 

  • Есть метаописание SOA с генератором запросов. В таком случае в каком-нибудь Oracle используют пакет dbms_sql, а в таблицах лежат нарезанными куски запросов или запросы с макросами.
  • Есть графы и гиперграфы, вырождающиеся в нечто подобное тому, что творится в Facebook.
  • Есть иерархические метамодельки, которые на первый взгляд дружат с ООП, но на деле порождают ад, когда попытаешься натянуть на них подсистему с Workflow внутри. 
  • И ещё что-то, чего я не видел, конечно.

Как водится, я в сторонке стоял по большей части, когда другие метамоделировали! Но некоторые вещи всё же умудрился пощупать вплотную. 

Взял иерархическую метамодельку за основу и решил натянуть её на Haskell с его интересными ADT. СУБД в проекте — PostgreSQL. Да, с текущими драйверами постгреса в хаскеле пока дела обстоят туговато. Все они завязаны на libpq, в недрах которого синхронно гоняются строки. 

Нативных драйверов готовых нет, есть два экспериментальных: 

  • Hasql >= 0.20.
  • postgresql-wire (нет на Hackage).

А они уже очень скоро понадобятся. Потому как уже очень скоро я упрусь в тормоза.

Завёл пока «строку», «число» и «время» в кач-ве типов атрибутов. Завёл парочку объектных типов. Завёл рута-родителя. И начал собирать грабельки.

Read more...Collapse )