SingleStore¶
Overzicht¶
SingleStore is de centrale gegevensopslaglaag van Wasstraat Archeologische Data. Het is een aangepast NoSQL-systeem (gebouwd op MongoDB) dat ongegenereerde flexibiliteit biedt bij het opslaan van archeologische gegevens.
Belangrijk
SingleStore is geen commercieel product, maar een speciaal ontworpen, interne NoSQL-opslagsysteem. Dit geeft volledige controle over datastructuren en queryoptimalisatie.
Kernprincipes¶
Schema-vrijheid¶
In tegenstelling tot traditionele relationele databases legt SingleStore geen vast schema op. Dit maakt het ideaal voor archeologische data met:
- Heterogene structuren
- Variabele attributen
- Ongestructureerde metadata
{
"artefact": "WSTR-2024-001",
"type": "aardewerk",
"descriptie": "Fragmentarisch aardewerk, handgevormd",
"dateringen": [
{"periode": "Vroeg Bronstijd", "type": "gis_analyse"},
{"periode": "circa 2000 vC", "type": "schatting_expert"}
],
"locatie": {
"coördinaten": [52.3702, 4.8952],
"graafvak": "G12",
"diepte": "0.65m"
},
"materiaal": ["aarde", "kwarts"],
"fotografie": {
"aantal": 4,
"referenties": ["WSTR-2024-001-001.jpg", "WSTR-2024-001-002.jpg"]
}
}
Polymorfisme en Metadatering¶
SingleStore ondersteunt polymorfische gegevenstypen door middel van geavanceerde metadatering:
- Type-informatie: Metatags geven aan wat het gegevenstype is
- Hiërarchische thesauri: Categorisering en ondergroeperingen van gegevenstypen
- Dynamische velden: Velden kunnen naar behoefte worden toegevoegd of gewijzigd
Metadatering
Metadata helpt het systeem te begrijpen wat elk gegevensveld betekent en hoe het moet worden geïnterpreteerd, ook al ontbreekt een vast schema.
Architectuur¶
Opslagstructuur¶
┌─────────────────────────────────┐
│ SingleStore (NoSQL Database) │
└────────┬────────────────────────┘
│
├─► Collections
│ ├─ artefacten
│ ├─ locaties
│ ├─ dateringen
│ └─ ...
│
├─► Metadatering
│ ├─ Typesinformatie
│ ├─ Thesauri
│ └─ Validatieregels
│
└─► Indexen
├─ Fulltext
├─ Geografisch
└─ Chronologisch
Hiërarchische Thesauri¶
SingleStore beheerst complexe woordenlijsten met hiërarchische structuren:
Periode
├─ Prehistorie
│ ├─ Steentijd
│ │ ├─ Paleolithicum
│ │ ├─ Mesolithicum
│ │ └─ Neolithicum
│ └─ Bronstijd
│ ├─ Vroeg Bronstijd
│ ├─ Midden Bronstijd
│ └─ Laat Bronstijd
└─ Historisch
├─ Romaans
├─ Middeleeuwen
└─ Moderner
Flexibele Datastructuren¶
Voorbeeld: Verschillende Artefacttypes¶
Een van de voornaamste voordelen is dat verschillende artefacttypes zonder problemen kunnen worden opgeslagen:
{
"_id": "WSTR-2024-001",
"type": "aardewerk",
"vorm": "pot",
"decoratie": "ingedrukt motief"
}
{
"_id": "WSTR-2024-002",
"type": "werktuig",
"materiaal": "steen",
"schnittechniek": "debitage"
}
{
"_id": "WSTR-2024-003",
"type": "structuur",
"soort": "paalspoor",
"diameter": 0.35,
"diepte": 0.78
}
Alle drie de records kunnen zonder problemen in dezelfde collection worden opgeslagen.
Data-onafhankelijkheid¶
Een cruciaal voordeel van SingleStore is dat het geen erfenis neemt van de originele opslagstructuur. Dit betekent:
- Data wordt gelijk gesteld wanneer het wordt opgeslagen
- De originele structuur uit Excel, Word of Access wordt niet meegenomen
- Normalisatie en harmonisering vinden plaats in de transformatie- en validatielagen
Voordeel
Dit maakt het eenvoudig om data uit heel verschillende bronnen in één enkel systeem samen te voegen, zonder dat de oorspronkelijke diversiteit aan structuren problemen veroorzaakt.
Best Practices¶
Naamgeving¶
- Gebruik consistent naamschema voor collections (bijv.
artefacten,locaties,structuren) - Vermijd speciale karakters in veldnamen
- Gebruik snake_case voor veldnamen
Documenten¶
- Houd documenten logisch gegroepeerd
- Vermijd zeer diep geneste structuren (meer dan 5 niveaus)
- Gebruik arrays voor herhalende gegevens
Performance¶
- Creëer indexen voor veelgebruikte zoekcriteria
- Monitor de grootte van documenten
- Denormaliseer voorzichtig voor veel voorkomende querys
Queries¶
SingleStore ondersteunt krachtige queryinterfaces:
// Alle artefacten uit periode "Bronstijd"
db.artefacten.find({
"dateringen.periode": "Bronstijd"
})
// Artefacten in geografisch gebied
db.artefacten.find({
"locatie.coördinaten": {
$near: [52.3702, 4.8952],
$maxDistance: 5000
}
})
// Fulltextzoeking
db.artefacten.find({
$text: { $search: "handgevormd aardewerk" }
})
Integratie met andere Lagen¶
SingleStore werkt nauw samen met:
- Extractie: Ontvangt en slaat opgehaalde data op
- Transformatie: Verwerkt en normaliseert opgeslagen data
- Validatie: Voert controles uit op opgeslagen records
- Crossviews: Identificeert verbanden en duplicaten
- Zoeken: Voert geavanceerde queries uit