Flutter vs. Dart
De meeste mensen halen Flutter en Dart door elkaar alsof ze hetzelfde zijn, vooral omdat Dart en Flutter nauw samenwerken in crossplatformontwikkeling. Beide zijn essentieel voor het bouwen van android...
Bij het maken van een nieuw project hoort ook het kiezen van de juiste database om je gegevens in op te slaan. Veel ontwikkelaars die ik ken, kiezen vanaf het begin standaard voor de relationele database. Maar is dat de beste keuze? Dat hangt natuurlijk van veel factoren af. In dit artikel wil ik je kennis laten maken met andere soorten databases om je keuze gemakkelijker te maken en je te helpen voorbereid te zijn in je toekomstige inspanningen.
Het type database is niet het enige onderwerp om rekening mee te houden. Er zijn veel andere zaken om over na te denken, bijvoorbeeld hoeveel actieve gebruikers de applicatie kan hebben? Heb je overal sterke consistentie nodig? Zal de uiteindelijke consistentie in sommige gevallen voldoende zijn? Er zijn zoveel vragen zonder eenduidig antwoord, want "hoe meer je je erin verdiept, hoe ingewikkelder het wordt". Houd er dus rekening mee dat dit artikel alleen gericht is op databasetypen.
Neem een kop koffie en geniet van deze lezing.
Om te beginnen is het goed om te weten dat er twee hoofdtypen databases zijn: relationele (SQL) en niet-rationele (NoSQL).
Er is nog een ander type dan de twee hierboven genoemde, namelijk een in-memory database. Deze kan niet worden geclassificeerd als relationeel of niet-rationeel omdat het te maken heeft met waar de gegevens fysiek worden opgeslagen. Elke database kan worden opgeslagen op een schijf of in het geheugen.
Naar mijn mening is dit het populairste type database. Het werkt goed met structurele gegevens waarbij je relaties tussen de records wilt bijhouden. De databasestructuur wordt beschreven in een schema.
De belangrijkste voordelen hebben betrekking op transacties (ze helpen om gegevensintegriteit te garanderen en volgen de ACID regels) en de mogelijkheid om veel complexe queries te verwerken.
Het is handig voor het bewaren van gegevens die structureel niet vaak veranderen en die je bijvoorbeeld permanent moet bewaren:
Amazon Aurora, Microsoft Azuur SQL-database, PostgreSQL, MySQL.
Relationele databases zijn voor veel nieuwe toepassingen ontoereikend en je hebt meer dan één database nodig. In het volgende deel van het artikel zal ik me richten op de niet-relationele databases.
Elke gegevenswaarde wordt opgeslagen met een unieke sleutel. Dit betekent dat gegevens toegankelijk zijn via een enkele sleutel, net zoals dat gebeurt in een hash map. In tegenstelling tot relationele databases worden het schema of de relaties tussen records niet afgedwongen. De meeste van deze databases ondersteunen gewoonlijk geen update operaties. Om gegevens te wijzigen, moet je de hele bestaande set overschrijven.
Het is handig voor gegevens die je snel wilt lezen/schrijven (maar niet vaak wilt bijwerken):
Memcached, Amazon DynamoDB, Azure Cosmos DB, Redis.
Het slaat verzamelingen van documenten op. Elk document bevat velden met gegevens, die eenvoudige waarden of complexe elementen kunnen zijn, zoals lijsten of kindverzamelingen. Het is belangrijk om te weten dat elk document een andere structuur kan hebben, zelfs als ze hetzelfde voorstellen (elk document is uniek en evolueert in de tijd). Het eerste klantendocument bevat bijvoorbeeld minder informatie dan het tweede:
{
"Voornaam": "John",
"LastName": "Fake",
"Motoren": [
{
"Model": "BMW",
"Jaar": 2020
}
]
}
{
"Voornaam": "Alex",
{"LastName": "Nolastname",
"Leeftijd: 15,
"Address": {
"Land": "Polen",
"Stad": "Somewhere"
},
"Motoren": [
{
"Model": "BMW",
"Jaar": 2020
}
]
}
Het is handig voor gegevens die een flexibel schema nodig hebben voor snelle verwerking:
Amazon DocumentDB, Azure Cosmos DB, MongoDB, Redis.
Het maakt gebruik van een grafiekstructuur en is opgebouwd uit twee elementen: knooppunten en randen. Knooppunten zijn analoog aan tabelrijen of JSON-documenten. Edges zijn relaties tussen de nodes - ze zijn even belangrijk als nodes. Beide kunnen eigenschappen hebben. Bovendien kunnen edges een bepaalde richting van een relatie hebben.
Het is nuttig wanneer je gegevens lijken op een grafiek, d.w.z. relaties tussen gegevensitems zijn dynamisch en veranderen in de loop van de tijd. Bovendien is het een goede keuze wanneer een zakelijke of technische team relaties binnen hun gegevens moeten begrijpen. Enkele prominente voorbeelden zijn:
Amazon Neptune, Neo4j, ArangoDB, Titan.
Het slaat gegevens georganiseerd per tijd op. Typisch verzamelt het enorme hoeveelheden gegevens in realtime. Het wordt meestal gebruikt om gegevens op te slaan, hoewel updaten zeer zeldzaam is. Over het algemeen wordt een tijdstempel gebruikt als primaire sleutel en/of om gegevens te sorteren. In sommige databases kunnen tags worden gedefinieerd als aanvullende informatie, zoals de herkomst of het type van de gegevens.
Het is handig om kleine hoeveelheden gegevens op chronologische volgorde op te slaan, bijvoorbeeld in:
Azure Time Series Insights, Amazon Timestream, InfluxDB.
Het biedt een onveranderlijk, transparant en cryptografisch verifieerbaar transactielogboek dat eigendom is van een centrale autoriteit. - Overzicht QLDB van Amazon
Laten we kort elk sleutelwoord in het bovenstaande citaat uitleggen:
Het is nuttig om een nauwkeurige geschiedenis op te slaan, bijv. door het loggen van opeenvolgende invoer van elke gegevenswijziging, zoals in:
Amazon QLDB
Er is geen eenvoudig antwoord op de vraag die in de titel van dit artikel wordt gesteld. De enige manier om de juiste database te kiezen is door meer te weten te komen over je gegevens. Beantwoord de vraag: "Wat voor soort gegevens genereert uw toepassing?", en u zult de juiste keuzes kunnen maken.
Verder moet je de bedrijfsvereisten en het toepassingsdomein heel goed kennen. Je moet weten hoe je de gegevens gaat gebruiken, welke queries je naar de database gaat sturen, hoe vaak je gegevens gaat bewaren, lezen, bijwerken of verwijderen. Al deze dingen zijn belangrijk, maar niet alle ontwikkelaars besteden voldoende aandacht aan deze gebieden.
Denk alsjeblieft na over je gegevens in de applicatie die je ontwikkelt om betere software te maken/verbeteren. Over het algemeen hoop ik dat je je gegevens goed genoeg leert kennen om ze op te slaan op een plek waar ze gelukkig zullen zijn.
Lees meer:
Een paar trucjes om je JavaScript-toepassing te versnellen
Manieren om je Rails prestaties te verhogen
Feiten en fabels over samenwerken met externe partner voor softwareontwikkeling