00TD02A_Copilot_Matematikk_AsCode_v3_del3 - itnett/FTD02H-N GitHub Wiki
Å vise hvordan de samme beregningene kan utføres i forskjellige databaser krever en forståelse av hver databases evner og syntaks. Noen databaser, som MongoDB og Redis, er NoSQL-databaser og bruker derfor en annen tilnærming enn SQL-databaser som MySQL, PostgreSQL og SQL Server. Her er en oversikt over hvordan man kan utføre tilsvarende operasjoner i de nevnte databasene.
1. Cassandra
Cassandra bruker CQL (Cassandra Query Language) som ligner på SQL.
-- Create the table
CREATE TABLE PerformanceMetrics (
student_id UUID PRIMARY KEY,
cpu_usage float,
memory_usage float,
network_traffic float,
disk_usage float,
network_latency float
);
-- Insert data
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency)
VALUES (uuid(), 75.5, 60.2, 500.0, 250.0, 20.5);
-- Query to calculate percentage utilization
SELECT student_id, cpu_usage, memory_usage,
((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization
FROM PerformanceMetrics;
2. PostgreSQL
PostgreSQL støtter avanserte SQL-funksjoner og matematiske operasjoner.
-- Create the table
CREATE TABLE PerformanceMetrics (
metric_id SERIAL PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
-- Insert data
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency)
VALUES (1, 75.5, 60.2, 500.0, 250.0, 20.5);
-- Query to calculate percentage utilization
SELECT student_id,
((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization
FROM PerformanceMetrics;
3. SQLite
SQLite er en lettvekts database som støtter mange SQL-funksjoner.
-- Create the table
CREATE TABLE PerformanceMetrics (
metric_id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id INTEGER,
cpu_usage REAL,
memory_usage REAL,
network_traffic REAL,
disk_usage REAL,
network_latency REAL
);
-- Insert data
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency)
VALUES (1, 75.5, 60.2, 500.0, 250.0, 20.5);
-- Query to calculate percentage utilization
SELECT student_id,
((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization
FROM PerformanceMetrics;
4. MariaDB
MariaDB er en fork av MySQL og støtter de fleste av de samme funksjonene.
-- Create the table
CREATE TABLE PerformanceMetrics (
metric_id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
-- Insert data
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency)
VALUES (1, 75.5, 60.2, 500.0, 250.0, 20.5);
-- Query to calculate percentage utilization
SELECT student_id,
((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization
FROM PerformanceMetrics;
5. ArangoDB
ArangoDB bruker AQL (ArangoDB Query Language) for spørringer.
-- Create the collection
db._create('PerformanceMetrics');
-- Insert data
db.PerformanceMetrics.insert({
student_id: 1,
cpu_usage: 75.5,
memory_usage: 60.2,
network_traffic: 500.0,
disk_usage: 250.0,
network_latency: 20.5
});
-- Query to calculate percentage utilization
FOR metric IN PerformanceMetrics
RETURN {
student_id: metric.student_id,
percentage_utilization: ((metric.cpu_usage + metric.memory_usage) / 2) * 100
}
6. RethinkDB
RethinkDB bruker ReQL (RethinkDB Query Language).
// Create the table
r.db('test').tableCreate('PerformanceMetrics');
// Insert data
r.table('PerformanceMetrics').insert({
student_id: 1,
cpu_usage: 75.5,
memory_usage: 60.2,
network_traffic: 500.0,
disk_usage: 250.0,
network_latency: 20.5
});
// Query to calculate percentage utilization
r.table('PerformanceMetrics').map(function (metric) {
return {
student_id: metric('student_id'),
percentage_utilization: ((metric('cpu_usage').add(metric('memory_usage'))).div(2)).mul(100)
};
});
7. MongoDB
MongoDB bruker en dokumentmodell og spørringer i BSON.
// Create the collection and insert data
db.PerformanceMetrics.insert({
student_id: 1,
cpu_usage: 75.5,
memory_usage: 60.2,
network_traffic: 500.0,
disk_usage: 250.0,
network_latency: 20.5
});
// Query to calculate percentage utilization
db.PerformanceMetrics.aggregate([
{
$project: {
student_id: 1,
percentage_utilization: {
$multiply: [
{
$divide: [
{ $add: ["$cpu_usage", "$memory_usage"] },
2
]
},
100
]
}
}
}
]);
8. OrientDB
OrientDB støtter både dokument- og grafmodeller.
-- Create the class
CREATE CLASS PerformanceMetrics EXTENDS V;
-- Insert data
INSERT INTO PerformanceMetrics SET student_id = 1, cpu_usage = 75.5, memory_usage = 60.2, network_traffic = 500.0, disk_usage = 250.0, network_latency = 20.5;
-- Query to calculate percentage utilization
SELECT student_id, ((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization FROM PerformanceMetrics;
9. Redis
Redis er en nøkkel-verdi database og støtter LUA-skript for komplekse beregninger.
-- Store data in Redis
HMSET student:1 cpu_usage 75.5 memory_usage 60.2 network_traffic 500.0 disk_usage 250.0 network_latency 20.5
-- LUA script to calculate percentage utilization
redis.call('HMSET', 'student:1', 'percentage_utilization', (redis.call('HGET', 'student:1', 'cpu_usage') + redis.call('HGET', 'student:1', 'memory_usage')) / 2 * 100)
10. SQL Server Express
SQL Server Express støtter avanserte SQL-funksjoner og beregninger.
-- Create the table
CREATE TABLE PerformanceMetrics (
metric_id INT IDENTITY PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
-- Insert data
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency)
VALUES (1, 75.5, 60.2, 500.0, 250.0, 20.5);
-- Query to calculate percentage utilization
SELECT student_id,
((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization
FROM PerformanceMetrics;
11. Couchbase
Couchbase bruker N1QL (Couchbase Query Language).
-- Create the document
INSERT INTO `PerformanceMetrics` (KEY, VALUE) VALUES ("metric::1", {
"student_id": 1,
"cpu_usage": 75.5,
"memory_usage": 60.2,
"network_traffic": 500.0,
"disk_usage": 250.0,
"network_latency": 20.5
});
-- Query to calculate percentage utilization
SELECT student_id,
((cpu_usage + memory_usage) / 2) * 100 AS percentage_utilization
FROM `PerformanceMetrics`;
Disse eksemplene viser hvordan du kan utføre lignende beregninger i forskjellige databaser ved hjelp av deres respektive spørringsspråk og funksjoner. MySQL og PostgreSQL har omfattende støtte for matematiske operasjoner, mens NoSQL-databaser som MongoDB og Redis har sine egne metoder for å utføre beregninger. Avhengig av hvilken database du bruker, kan syntaksen variere, men konseptene forblir de samme.
For å automatisere oppsettet av containere med forskjellige databaser, sette inn testdata, utføre sikkerhetskopiering og gjenoppretting, og logge alle operasjonene, kan vi bruke Docker Compose sammen med Bash-skript. Her er en trinnvis veiledning:
1. Sett opp Docker Compose
Opprett en docker-compose.yml
fil for å definere alle databasene.
2. Opprett Bash-skript for automatisering
Skriptet vil laste ned avhengigheter, opprette containere, fylle dem med testdata, utføre sikkerhetskopiering og gjenoppretting, og logge alle operasjonene.
3. Opprett SQL- og NoSQL-skript for å fylle testdata og utføre spørringer
Her er en komplett løsning:
docker-compose.yml
Trinn 1: Opprett version: '3.8'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: testdb
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
mariadb:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mariadb-data:/var/lib/mysql
mongodb:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
cassandra:
image: cassandra:latest
ports:
- "9042:9042"
volumes:
- cassandra-data:/var/lib/cassandra
volumes:
postgres-data:
mariadb-data:
mongo-data:
cassandra-data:
database_setup.sh
Trinn 2: Opprett Bash-skript #!/bin/bash
# Start Docker containers
docker-compose up -d
# Wait for containers to be fully up and running
sleep 20
# PostgreSQL setup
echo "Setting up PostgreSQL..."
docker exec -i $(docker ps -qf "name=postgres") psql -U user -d testdb <<-EOSQL
CREATE TABLE PerformanceMetrics (
metric_id SERIAL PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency) VALUES
(1, 75.5, 60.2, 500.0, 250.0, 20.5);
EOSQL
# MariaDB setup
echo "Setting up MariaDB..."
docker exec -i $(docker ps -qf "name=mariadb") mysql -u user -ppassword testdb <<-EOSQL
CREATE TABLE PerformanceMetrics (
metric_id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency) VALUES
(1, 75.5, 60.2, 500.0, 250.0, 20.5);
EOSQL
# MongoDB setup
echo "Setting up MongoDB..."
docker exec -i $(docker ps -qf "name=mongodb") mongo testdb --eval '
db.PerformanceMetrics.insert({
student_id: 1,
cpu_usage: 75.5,
memory_usage: 60.2,
network_traffic: 500.0,
disk_usage: 250.0,
network_latency: 20.5
});
'
# Cassandra setup
echo "Setting up Cassandra..."
docker exec -i $(docker ps -qf "name=cassandra") cqlsh <<-EOSQL
CREATE KEYSPACE testdb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
USE testdb;
CREATE TABLE PerformanceMetrics (
student_id UUID PRIMARY KEY,
cpu_usage float,
memory_usage float,
network_traffic float,
disk_usage float,
network_latency float
);
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency) VALUES
(now(), 75.5, 60.2, 500.0, 250.0, 20.5);
EOSQL
# Backup databases
echo "Backing up databases..."
docker exec -i $(docker ps -qf "name=postgres") pg_dump -U user -d testdb > postgres_backup.sql
docker exec -i $(docker ps -qf "name=mariadb") mysqldump -u user -ppassword testdb > mariadb_backup.sql
docker exec -i $(docker ps -qf "name=mongodb") mongoexport --db testdb --collection PerformanceMetrics --out mongo_backup.json
docker exec -i $(docker ps -qf "name=cassandra") cqlsh -e "COPY testdb.PerformanceMetrics TO '/var/lib/cassandra/data/cassandra_backup.csv'"
# Stop and remove containers
echo "Stopping and removing containers..."
docker-compose down
# Bring up containers again
echo "Bringing up containers again..."
docker-compose up -d
sleep 20
# Restore databases from backup
echo "Restoring PostgreSQL from backup..."
docker exec -i $(docker ps -qf "name=postgres") psql -U user -d testdb < postgres_backup.sql
echo "Restoring MariaDB from backup..."
docker exec -i $(docker ps -qf "name=mariadb") mysql -u user -ppassword testdb < mariadb_backup.sql
echo "Restoring MongoDB from backup..."
docker exec -i $(docker ps -qf "name=mongodb") mongoimport --db testdb --collection PerformanceMetrics --drop --file /mongo_backup.json
echo "Restoring Cassandra from backup..."
docker exec -i $(docker ps -qf "name=cassandra") cqlsh -e "COPY testdb.PerformanceMetrics FROM '/var/lib/cassandra/data/cassandra_backup.csv'"
# Log operations
echo "Logging operations..."
echo "Database operations completed on $(date)" > db_operations.log
# Shut down containers one by one
echo "Shutting down containers one by one..."
docker-compose stop postgres
docker-compose stop mariadb
docker-compose stop mongodb
docker-compose stop cassandra
echo "All operations completed successfully!"
Trinn 3: Kjør Skriptet
Gi kjøringsrettigheter til skriptet og kjør det.
chmod +x database_setup.sh
./database_setup.sh
Oppsummering
Dette skriptet utfører følgende:
- Starter Docker-containere for PostgreSQL, MariaDB, MongoDB og Cassandra.
- Venter på at alle containere skal starte opp.
- Oppretter nødvendige tabeller og setter inn testdata i hver database.
- Utfører sikkerhetskopiering av hver database.
- Stopper og fjerner containere.
- Starter opp containere igjen.
- Gjenoppretter data fra sikkerhetskopiering.
- Logger operasjonene.
- Stopper containere en etter en.
Dette gir en fullstendig automatisert måte å sette opp, teste og håndtere flere databaser på.
For å sette opp en praktisk lab for flere databaser som dekker emnene i fagene Database, Programmering og Linux og container, kan vi bruke Docker og Docker Compose for å håndtere flere databaseinstanser. Vi vil opprette nødvendige tabeller, sette inn testdata, kjøre spørringer, utføre sikkerhetskopiering og gjenoppretting, og logge operasjonene. Her er en omfattende guide for å gjøre dette.
1. Docker Compose Setup
Først oppretter vi en docker-compose.yml
for å definere miljøet vårt med PostgreSQL, MariaDB, MongoDB og Cassandra.
version: '3.8'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: testdb
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
mariadb:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mariadb-data:/var/lib/mysql
mongodb:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
cassandra:
image: cassandra:latest
ports:
- "9042:9042"
volumes:
- cassandra-data:/var/lib/cassandra
volumes:
postgres-data:
mariadb-data:
mongo-data:
cassandra-data:
database_setup.sh
2. Oppretting av Bash-skript Dette skriptet vil håndtere oppsett av containere, sette inn testdata, utføre sikkerhetskopiering og gjenoppretting, og logge operasjonene.
#!/bin/bash
# Start Docker containers
docker-compose up -d
# Wait for containers to be fully up and running
sleep 20
# PostgreSQL setup
echo "Setting up PostgreSQL..."
docker exec -i $(docker ps -qf "name=postgres") psql -U user -d testdb <<-EOSQL
CREATE TABLE PerformanceMetrics (
metric_id SERIAL PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency) VALUES
(1, 75.5, 60.2, 500.0, 250.0, 20.5);
EOSQL
# MariaDB setup
echo "Setting up MariaDB..."
docker exec -i $(docker ps -qf "name=mariadb") mysql -u user -ppassword testdb <<-EOSQL
CREATE TABLE PerformanceMetrics (
metric_id INT AUTO_INCREMENT PRIMARY KEY,
student_id INT,
cpu_usage FLOAT,
memory_usage FLOAT,
network_traffic FLOAT,
disk_usage FLOAT,
network_latency FLOAT
);
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency) VALUES
(1, 75.5, 60.2, 500.0, 250.0, 20.5);
EOSQL
# MongoDB setup
echo "Setting up MongoDB..."
docker exec -i $(docker ps -qf "name=mongodb") mongo testdb --eval '
db.PerformanceMetrics.insert({
student_id: 1,
cpu_usage: 75.5,
memory_usage: 60.2,
network_traffic: 500.0,
disk_usage: 250.0,
network_latency: 20.5
});
'
# Cassandra setup
echo "Setting up Cassandra..."
docker exec -i $(docker ps -qf "name=cassandra") cqlsh <<-EOSQL
CREATE KEYSPACE testdb WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
USE testdb;
CREATE TABLE PerformanceMetrics (
student_id UUID PRIMARY KEY,
cpu_usage float,
memory_usage float,
network_traffic float,
disk_usage float,
network_latency float
);
INSERT INTO PerformanceMetrics (student_id, cpu_usage, memory_usage, network_traffic, disk_usage, network_latency) VALUES
(now(), 75.5, 60.2, 500.0, 250.0, 20.5);
EOSQL
# Backup databases
echo "Backing up databases..."
docker exec -i $(docker ps -qf "name=postgres") pg_dump -U user -d testdb > postgres_backup.sql
docker exec -i $(docker ps -qf "name=mariadb") mysqldump -u user -ppassword testdb > mariadb_backup.sql
docker exec -i $(docker ps -qf "name=mongodb") mongoexport --db testdb --collection PerformanceMetrics --out mongo_backup.json
docker exec -i $(docker ps -qf "name=cassandra") cqlsh -e "COPY testdb.PerformanceMetrics TO '/var/lib/cassandra/data/cassandra_backup.csv'"
# Stop and remove containers
echo "Stopping and removing containers..."
docker-compose down
# Bring up containers again
echo "Bringing up containers again..."
docker-compose up -d
sleep 20
# Restore databases from backup
echo "Restoring PostgreSQL from backup..."
docker exec -i $(docker ps -qf "name=postgres") psql -U user -d testdb < postgres_backup.sql
echo "Restoring MariaDB from backup..."
docker exec -i $(docker ps -qf "name=mariadb") mysql -u user -ppassword testdb < mariadb_backup.sql
echo "Restoring MongoDB from backup..."
docker exec -i $(docker ps -qf "name=mongodb") mongoimport --db testdb --collection PerformanceMetrics --drop --file /mongo_backup.json
echo "Restoring Cassandra from backup..."
docker exec -i $(docker ps -qf "name=cassandra") cqlsh -e "COPY testdb.PerformanceMetrics FROM '/var/lib/cassandra/data/cassandra_backup.csv'"
# Log operations
echo "Logging operations..."
echo "Database operations completed on $(date)" > db_operations.log
# Shut down containers one by one
echo "Shutting down containers one by one..."
docker-compose stop postgres
docker-compose stop mariadb
docker-compose stop mongodb
docker-compose stop cassandra
echo "All operations completed successfully!"
Trinn 3: Kjøre Skriptet
Gi kjøringsrettigheter til skriptet og kjør det.
chmod +x database_setup.sh
./database_setup.sh
Praktisk Bruk i Fagene
Emne: Database
- Databasesystem: Forstå og sammenligne forskjellige databasesystemer som PostgreSQL, MariaDB, MongoDB, og Cassandra.
- SQL: Lær å skrive SQL-spørringer for PostgreSQL og MariaDB.
- Normalisering: Utfør normalisering på tabeller i SQL-databasene.
- ER-diagram: Lag ER-diagrammer for å modellere databasene.
- Brukeradministrasjon: Administrer brukere og rettigheter i PostgreSQL og MariaDB.
- Indeksering: Opprett indekser for å forbedre spørringsytelse.
- Logging: Implementer logging av databaseoperasjoner.
- Backup og Restore: Utfør sikkerhetskopiering og gjenoppretting av databaser.
- Kryptering: Lær hvordan du kan kryptere data i SQL-databasene.
- Datavisualisering: Bruk verktøy som Grafana eller Tableau for å visualisere data fra databasene.
- Sikkerhet: Implementer sikkerhetstiltak i databaser som bruk av SSL/TLS, brukertilgang og kryptering.
Emne: Programmering
- Programstrukturer: Lær grunnleggende programstrukturer som variabler, kontrollstrukturer og løkker.
- Datastrukturer: Forstå og bruk datastrukturer som lister, stakker, køer og trær.
- Bibliotek: Bruk av standardbiblioteker i programmeringsspråk som Python.
- Funksjoner og metoder: Definer og bruk funksjoner og metoder.
- Objektorientert programmering: Utvikle programmer ved hjelp av OOP-prinsipper.
- Debugging, testing og unntaksbehandling: Bruk debugging-verktøy, skriv tester og håndter unntak.
- API: Bygg og bruk APIer for å kommunisere med databaser.
- GUI: Utvikle grafiske brukergrensesnitt.
- UML: Lag UML-diagrammer for å designe programvare.
- Filbehandling: Les og skriv til filer i forskjellige formater.
- Datasikkerhet: Implementer sikkerhetspraksiser i programmering.
Emne: Linux og Container
- Systemdrift: Administrer Linux-systemer.
- Linux distribusjoner: Utforsk ulike Linux-dis
tribusjoner.
3. Brukeradministrasjon: Administrer brukere og grupper i Linux.
4. Installasjon: Installer og konfigurer programvare på Linux.
5. Nettverk: Konfigurer nettverk i Linux.
6. Prosesser: Administrer prosesser og tjenester.
7. Terminal: Bruk terminalkommandoer for systemadministrasjon.
8. Pakkesystemer: Administrer programvarepakker med verktøy som apt
, yum
eller pacman
.
9. Lagring og filsystemer: Konfigurer og administrer lagringsenheter og filsystemer.
10. Servertjenester: Sett opp og administrer servertjenester som webservere, databaseservere, etc.
11. Containere: Bruk Docker til å administrere containere.
12. Automatisering: Automatiser oppgaver med skripting og verktøy som Ansible.
13. Sikkerhet: Implementer sikkerhetstiltak på Linux-systemer.
Konklusjon
Dette lab-oppsettet gir en omfattende læringsplattform hvor du kan utforske og praktisere mange av de essensielle emnene innen databaser, programmering og Linux-administrasjon. Ved å bruke Docker og Docker Compose, får du en fleksibel og skalerbar løsning for å håndtere flere databaseinstanser og praktisere reelle operasjoner som sikkerhetskopiering og gjenoppretting, oppsett og konfigurasjon, samt datahåndtering.