HORIZONIS HOLDINGS BV HORIZONIS Holdings BV
Powder-coated rack aisle under overhead work-light, one lamp lit mid-frame

Database work we take on, from schema to recovery

HORIZONIS HOLDINGS BV takes on a defined set of database engagements: building and extending management systems, designing schemas, optimising queries, setting up monitoring, and handling migration and recovery. Here is what each of those means in practice.

The work, in practice

Six engagements we take on directly, plus cloud-native PostgreSQL and the situations where the estate already exists. Each one starts from the data model, not the interface.

Layers in play

Building systems

Software that manages databases — a component beside an existing engine, a tool for a specific administrative problem, or an extension to something running.

Schema

Design and review

Normalisation, indexes, naming, foreign keys, nullable columns. Each is cheap to change at design time and expensive later.

Query

Optimisation

Execution-plan reading across PostgreSQL, MySQL and SQL Server. We isolate which of four common causes is at work before touching the query.

Recovery

Backup and restore

Logical versus physical backups, restore drills, documented procedures. A backup that has never been restored is a hypothesis.

What each engagement actually covers

A working summary of scope, typical triggers, and what we deliver. Full detail on each line sits in the sections below.

Engagement Typical trigger What we deliver Typical span
Database management system build A gap between the engine and the way the team works A running component or tool, tested against your data 6–20 weeks
Schema design or review A new store, or a schema that no longer matches how it is used A concrete change plan with an order of operations 2–6 weeks
Query optimisation A query that was fine and is not any more Plan readings, rewritten query, index changes, explanation 1–4 weeks
Performance monitoring Incidents discovered by users rather than by the team A short list of signals, thresholds, and an alert path that holds 3–8 weeks
Backup and recovery A restore that has never been tested, or a new recovery requirement Documented procedures, restore drills, retention and copy placement 2–5 weeks
Database migration A version that has been deferred, or a change of engine or host A phased plan with a rollback point at each stage 4–16 weeks
Cloud-native PostgreSQL PostgreSQL moving onto Kubernetes, or a GitOps workflow being adopted Cluster setup, operational model, retention and schema fundamentals kept in place 4–10 weeks
Working with an existing estate Several engines in production and no clear order of work An assessment, a risk short-list, and a change order that fits the business 2–6 weeks

Spans are the ranges we see on live engagements. Your situation will change the number — a fixed-scope piece can be much shorter, and an estate assessment is usually the shortest first step.

Close view of a brushed steel rack label plate under an overhead work-lamp

Which layer is the work

Read the same engagement four ways

Every engagement touches schema, queries, backup and operations to some degree. Pick the layer you are living with right now.

Query layer plans, joins, volume
Recovery & ops drills, alerts, lag

Schema layer engages when

A new store is being designed, or an existing one has drifted from the workloads it was written for. The output is a change plan, not a lecture on normal form.

Query layer engages when

A query that was fine is not any more. We read the execution plan to separate a bad plan from a query that prevents a good one.

Recovery and ops engage when

Nobody has tested a restore, or the team is finding out about problems from users. Documented drills and a short signal list flip that order.

What we do, engagement by engagement

Seven notes on the work: what each engagement is, when it is worth starting, and what a good outcome looks like.

  • Building and extending database management systems

    Our core work is software that manages databases. That can mean a component sitting alongside an existing engine, a tool that solves a specific administrative problem, or an extension to something already running. We build for PostgreSQL, MySQL, SQL Server and IBM Db2 environments, and the choice of stack follows the estate rather than our preferences.

    Development is database-first, which means we design the data model before the interface. It shows in the result. Systems built this way tend to survive their first year of real use without a redesign, because the assumptions about what the data can and cannot do were made early and on purpose.

    Database-first: model, then interface

  • Schema design and review

    A schema is a set of decisions about what your organisation will find easy for the next several years. Normalisation, index strategy, naming conventions, foreign key constraints, the use of nullable columns: each one is cheap to change at design time and expensive later.

    We work on schemas at both ends. New designs get built with the workload in mind, whether it is a transactional service or an analytical store. Existing schemas get reviewed against how they are actually used, which frequently differs from how they were imagined. The output is a concrete change plan, not a lecture on third normal form.

    Reviewed against real workload, not intent

  • Query optimisation

    Slow queries usually have one of four causes: a missing or unused index, a plan that the optimiser chose badly, a query written in a way that prevents a good plan, or a data volume the design was never meant to hold. Finding out which one applies requires reading the execution plan, not guessing.

    We optimise queries across PostgreSQL, MySQL and SQL Server, and we look at the surrounding causes as well. A query that is slow because the table has grown by a factor of fifty is a different problem from one that is slow because of a bad join order, and the fixes are different too.

    Four causes, one execution plan

  • Performance monitoring

    Monitoring answers a question that query optimisation does not: what is happening over time. Connection counts, cache hit ratios, replication lag, lock contention, the growth rate of the largest tables. Without this, a database is managed reactively, and reactive management means incidents are discovered by users.

    We set up monitoring that produces something a person can act on. Alerts that fire constantly get ignored. Dashboards that show forty metrics and no trend get ignored too. The goal is a short list of signals that indicate a problem early enough to do something about it.

    A short list, not a wall of gauges

  • Backup and recovery

    A backup that has never been restored is a hypothesis, not a safeguard. We treat recovery as the thing worth testing, with backups as the means to it. That means documented restore procedures, periodic restore drills, and clarity about the recovery point and recovery time a business can actually tolerate.

    The practical work includes choosing between logical and physical backups, deciding where copies live and how long they are kept, and making sure the person who needs to restore at 3am knows where the instructions are. This is unglamorous work and it is the difference between an incident and a catastrophe.

    Restore tested, not assumed

  • Database migration

    Migrations between engines, between hosting models, or between major versions of the same engine. Each has its own failure modes. Version upgrades are usually the least dramatic and the most often deferred, which is why they tend to hurt when they finally happen.

    We approach migration in phases with a rollback point at each one. Data type mapping, SQL dialect differences, and the behaviour of client tools all get checked before the cutover rather than after. A migration plan that assumes everything works on the first attempt is a plan that has not been tested.

    Phased, with a rollback at each step

  • Cloud-native database work

    CloudNativePG is the tool we reach for when PostgreSQL runs on Kubernetes. It deploys and manages PostgreSQL clusters in cloud-native environments and fits teams working with GitOps and containerized infrastructure. The operational model is genuinely different from running a database on a traditional server, and the failure modes are different too.

    We help teams adopt it without losing the fundamentals. A Kubernetes operator does not design your schema, choose your indexes or decide your retention policy. It handles the lifecycle of the cluster, and that is a meaningful amount of work removed, but it is not the whole job.

    Operator handles lifecycle; you still own the data

When the estate already exists

Working with what you already have

Plenty of engagements start with an estate nobody would design from scratch. A SQL Server instance used for reporting, a PostgreSQL cluster for a newer service, MySQL underneath a web application that predates the current team, and possibly an IBM Db2 system in a corner of the organisation that everyone is careful around. That is normal, and it is workable.

We assess what exists, identify what is genuinely at risk, and propose changes in an order that does not require stopping the business. Not every improvement needs to happen this quarter, and saying which ones can wait is part of the value.

What the first weeks of an assessment look like

Inventory
Every engine in production, its version, where it runs, what depends on it, and who holds the credentials. Written down, not remembered.
Risk short-list
Which failures would stop the business, and which would only be expensive. Separate the two before choosing order.
Order of work
A sequence that does not require stopping the business — one change at a time, each with its own rollback point.
What can wait
The improvements that are real but not urgent this quarter. Naming them keeps the short-list short.

Read more about how a first engagement runs, or compare the platforms we support.

Next step

Tell us what is failing, and we will tell you what we would do first

Most engagements start with a short conversation about your estate: which engines are in production, what is hurting, and what a reasonable first step looks like. If the answer is that you do not need us yet, we will say so.

Where we work from

HORIZONIS HOLDINGS BV
Avenue Louise 143
1050 Brussels, Belgium
Hours
Monday to Friday, 9:00 – 18:00