Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Σχετικά έγγραφα
Πληροφορική & Τηλεπικοινωνίες

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Μέρος 2ο: Επίπεδο Ευρετηρίου Β+ Δένδρων

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Επίπεδο Αρχείου Μπλοκ

Πληροφορική & Τηλεπικοινωνίες K25 Ανάπτυξη Λογισμικού Εαρινό Εξάμηνο 2008 Καθηγητής Γιάννης Ιωαννίδης. Επίπεδο Αρχείου Εγγραφών

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ανάπτυξη και Σχεδίαση Λογισμικού

Επεξεργασία Αρχείων Κειµένου

Εργαστήριο 9: Αρχεία

HY-486 Αρχές Κατανεμημένου Υπολογισμού

S, (5, -3, 34, -23, 7) ( *, _

Εργασία για το Facility Game Μάθημα: Δομές Δεδομένων Σωτήρης Γυφτόπουλος

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εργαστήριο 5. Εαρινό Εξάμηνο

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Διάλεξη 18η: Διαχείρηση Αρχείων

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

Ανάπτυξη και Σχεδίαση Λογισμικού

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

2η Προγραµµατιστική Εργασία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 18/12/12, 22:00

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Δομημένος Προγραμματισμός

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Εισαγωγή στον Προγραμματισμό

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

Δομημένος Προγραμματισμός (ΤΛ1006)

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Διαδικασιακός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

Διαδικασιακός Προγραμματισμός

Μεθόδων Επίλυσης Προβλημάτων

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός ΙI (Θ)

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

Εισαγωγή στο προγραμματιστικό περιβάλλον ANSI

Πρόγραμμα όρασης. Στη συνέχεια θα περιγράψουμε πώς δουλεύει το ρομπότ.

Προγραμματισμός Ι (ΗΥ120)

Διαδικασιακός Προγραμματισμός

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

FAIL PASS PASS οριακά

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Transcript:

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο 2015 2016 Ι. Ιωαννίδης Άσκηση 3: Αποθήκευση κατά στήλες Προθεσμία: 25 Ιανουαρίου 2016, 11:59μμ Ο σκοπός της εργασίας αυτής είναι η κατανόηση των Συστημάτων Διαχείρισης Βάσεων Δεδομένων που βασίζονται στην τεχνική αποθήκευση κατά στήλες (column store) για την διαχείριση των δεδομένων. Για πληροφορίες σχετικά με column stores, σας προτείνουμε να δείτε και τα παρακάτω: https://en.wikipedia.org/wiki/column-oriented_dbms http://nms.csail.mit.edu/~stavros/pubs/tutorial2009-column_stores.pdf Η διαχείριση των αρχείων γίνεται μέσω των συναρτήσεων με το πρόθεμα CS_ (column store). Tις εγγραφές τις διαχειρίζεστε μέσω των κατάλληλων συναρτήσεων. Τα πρωτότυπα (definitions) των συναρτήσεων που καλείστε να υλοποιήσετε δίνονται στη συνέχεια μαζί με επεξήγηση για τη λειτουργικότητα της κάθε μίας. Όπως και στην προηγούμενη άσκηση, οι συναρτήσεις της βιβλιοθήκης επιπέδου μπλοκ θα σας δίνονται έτοιμες. typedef struct { int id, char name[15], char surname[20], char status[1], char dateofbirth[11], int salary; } Record; Μία από τις βασικές διαφορές των column stores είναι ο τρόπος αποθήκευσης των εγγραφών. Στις κλασικές βάσεις δεδομένων, όλα τα πεδία μιας εγγραφής αποθηκεύονται στο ίδιο αρχείο. Στα column stores, το κάθε πεδίο μιας εγγραφής αποθηκεύετε σε διαφορετικό αρχείο. Στα πλαίσια της άσκησης, το column-store για τα 6 πεδία της εγγραφής Record, θα δημιουργεί 6 αρχεία, στα οποία θα αποθηκεύονται οι εγγραφές: id, name, surname, status, dateofbirth, salary αντίστοιχα σε κάθε αρχείο. Το πρώτο μπλοκ (block) κάθε αρχείου, περιλαμβάνει ειδική πληροφορία σχετικά με το ίδιο το αρχείο. Η πληροφορία αυτή χρησιμεύει στο να αναγνωρίσει κανείς το είδος του αρχείου, σε πληροφορία που αφορά το πεδίο κ.λπ. Στη συνέχεια δίνεται ένα παράδειγμα των εγγραφών που θα προστίθενται στα αρχεία που θα δημιουργείτε µε την υλοποίησή σας.

{22, Vaggelis, Nikolopoulos, S, 02-02-1981, 2000} {7, Christoforos, Svingos, M, 28-01-1983, 2100} {86, Yannis, Chronis, S, 06-04-1965, 3500} Συναρτήσεις BF (Block File) Στη συνέχεια, περιγράφονται οι συναρτήσεις που αφορούν το επίπεδο από block, πάνω στο οποίο θα βασιστείτε για την υλοποίηση των συναρτήσεων που ζητούνται όπως και στις προηγούμενες ασκήσεις. Η υλοποίηση των συναρτήσεων αυτών θα δοθεί έτοιμη με τη μορφή βιβλιοθήκης. Στο αρχείο κεφαλίδας BF.h που θα σας δοθεί υπάρχουν τα πρωτότυπα των συναρτήσεων μαζί με σχόλια για το πώς δουλεύουν και το μέγεθος ενός μπλοκ που είναι BF_BLOCK_SIZE, ίσο με 1024 bytes. void BF_Init() Με τη συνάρτηση BF_Init πραγματοποιείται η αρχικοποίηση του επιπέδου BF. int BF_CreateFile( char* filename /* όνομα αρχείου */ ) Η συνάρτηση BF_CreateFile δημιουργεί ένα αρχείο με όνομα filename το οποίο αποτελείται από block. Αν το αρχείο υπάρχει ήδη το παλιό αρχείο διαγράφεται. Σε περίπτωση επιτυχούς εκτέλεσης της συνάρτησης επιστρέφεται 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_OpenFile( char* filename /* όνομα αρχείου */ ) Η συνάρτηση BF_OpenFile ανοίγει ένα υπάρχον αρχείο από block με όνομα filename. Σε περίπτωση επιτυχίας, επιστρέφεται το αναγνωριστικό του αρχείου, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_CloseFile( int filedesc /* αναγνωριστικό αρχείου block */ ) Η συνάρτηση BF_CloseFile κλείνει το ανοιχτό αρχείο με αναγνωριστικό αριθμό filedesc. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_GetBlockCounter( int filedesc /* αναγνωριστικό αρχείου block */ ) Η συνάρτηση Get_BlockCounter δέχεται ως όρισμα τον αναγνωριστικό αριθμό filedesc ενός ανοιχτού αρχείου από block και βρίσκει τον αριθμό των διαθέσιμων block του, τον οποίο και επιστρέφει σε περίπτωση επιτυχούς εκτέλεσης. Σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError.

int BF_AllocateBlock( int filedesc /* αναγνωριστικό αρχείου block */ ) Με τη συνάρτηση BF_AllocateBlock δεσμεύεται ένα καινούριο block για το αρχείο με αναγνωριστικό αριθμό filedesc. Το νέο block αρχικοποιείται με μηδενικά και δεσμεύεται πάντα στο τέλος του αρχείου, οπότε ο αριθμός του block είναι BF_GetBlockCounter(fileDesc) 1. Σε περίπτωση επιτυχίας επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_ReadBlock( int filedesc, /* αναγνωριστικό αρχείου block */ int blocknumber, /* ο αριθμός ενός δεσμευμένου block μέσα στο αρχείο */ void** block /* δείκτης στα δεδομένα του block (αναφορά) */ ) Η συνάρτηση BF_ReadBlock βρίσκει το block με αριθμό blocknumber του ανοιχτού αρχείου με αναγνωριστικό αριθμό filedesc. Η μεταβλητή block αποτελεί ένα δείκτη στα δεδομένα του block, το οποίο θα πρέπει να έχει δεσμευτεί. Σε περίπτωση επιτυχίας, επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. int BF_WriteBlock( int filedesc, /* αναγνωριστικό αρχείου block */ int blocknumber /* ο αριθμός ενός δεσμευμένου block μέσα στο αρχείο */ ) Η συνάρτηση BF_WriteBlock γράφει στο δίσκο το δεσμευμένο block με αριθμό blocknumber του ανοιχτού αρχείου με αναγνωριστικό αριθμό filedesc. Σε περίπτωση επιτυχίας, επιστρέφει 0, ενώ σε περίπτωση αποτυχίας, επιστρέφεται ένας αρνητικός αριθμός. Αν θέλετε να δείτε το είδος του λάθους μπορείτε να καλέσετε τη συνάρτηση BF_PrintError. void BF_PrintError(char* message /* μήνυμα προς εκτύπωση */ ) Η συνάρτηση BF_PrintError βοηθά στην εκτύπωση των σφαλμάτων που δύναται να υπάρξουν με την κλήση συναρτήσεων του επιπέδου αρχείου block. Εκτυπώνεται στο stderr το message ακολουθούμενο από μια περιγραφή του πιο πρόσφατου σφάλματος.

Συναρτήσεις CS (Column-Store File) Στη συνέχεια περιγράφονται οι συναρτήσεις που καλείστε να υλοποιήσετε στα πλαίσια της εργασίας αυτής και που αφορούν τα αρχεία column-store. Όπου το κρίνετε εφικτό, μπορείτε να χρησιμοποιήσετε και τις συναρτήσεις για αρχεία σωρού που αναπτύξατε στην πρώτη άσκηση. void CS_Init() Με τη συνάρτηση CS_Init πραγματοποιείται η αρχικοποίηση του επιπέδου CS. int CS_CreateFiles( char **fieldnames, /* τα πεδία της δομής Record */ char *dbdirectory /* φακελος που περιέχει όλα τα αρχεία */) Η συνάρτηση CS_CreateFiles χρησιμοποιείται για τη δημιουργία και κατάλληλη αρχικοποίηση άδειων αρχείων, ένα για κάθε πεδίο που προσδιορίζεται από τον πίνακα fieldnames (και πρόκειται ουσιαστικά για τα πεδία της δομής Record). Τα αρχεία θα δημιουργούνται στο φάκελο με μονοπάτι dbdirectory. Τα ονόματα των αρχείων θα είναι της μορφής CSFile_όνομα-πεδίου, π.χ. το αρχείο που θα περιέχει names, θα ονομάζεται CSFile_name. Δεδομένου ότι σε αυτή την περίπτωση θα έχετε να διαχειριστείτε ταυτόχρονα πολλά αρχεία, ειδική πληροφορία εντοπισμού όλων των αρχείων θα αποθηκεύεται σε ένα νέο ειδικό αρχείο με όνομα π.χ. Header_Info. Η πληροφορία θα περιλαμβάνει τα ονόματα των αρχείων που βρίσκονται στο φάκελο και οτιδήποτε εσείς θεωρείτε απαραίτητο. Το αρχείο αυτό είστε ελεύθεροι να το δημιουργήσετε και διαχειριστείτε όπως θέλετε. Μπορείτε π.χ. να κάνετε πάλι χρήση των BF συναρτήσεων, είτε χρήση fopen κλπ.. Σε περίπτωση που εκτελεστεί επιτυχώς η συνάρτηση, επιστρέφεται 0, αλλιώς -1. int CS_OpenFile( HeaderInfo* header_info, /* δομή ανοιχτών αρχείων */ char *dbdirectory /* φακελος που περιέχει όλα τα αρχεία */ ) Η συνάρτηση CS_OpenFile ανοίγει το αρχείο header_info που βρίσκεται στο dbdirectory και επιστρέφει ένα struct που περιέχει τους File Descriptors για όλα τα αρχεία. Η συνάρτηση αυτή πρέπει από τις πληροφορίες που θα βρει στο header_info, να ανοίξει τα εν λόγω αρχεία και να διαβάσει από το πρώτο μπλοκ του καθενός την πληροφορία που αφορά το αρχείο column-store. Αποθηκεύει στο struct HeaderInfo τον αναγνωριστικό αριθμό ανοίγματος κάθε αρχείου, όπως αυτός επιστράφηκε από το επίπεδο διαχείρισης μπλοκ. Αν το αρχείο που ανοίχτηκε δεν πρόκειται για αρχείο column-store, τότε αυτό θεωρείται επίσης περίπτωση σφάλματος. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση -1. int CS_CloseFile( HeaderInfo* header_info /* δομή ανοιχτών αρχείων */ ) Η συνάρτηση CS_CloseFile βρίσκει τα filedesc των αρχείων που είναι ανοικτά και τα κλείνει. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση -1.

int CS_InsertEntry( HeaderInfo* header_info, /* δομή ανοιχτών αρχείων */ Record record /* εγγραφή προς εισαγωγή */) Η συνάρτηση CS_InsertEntry χρησιμοποιείται για την εισαγωγή μίας εγγραφής στα αρχεία columnstore. Η πληροφορία για τα αρχεία CS διαβάζεται από τη δομή HeaderInfo, ενώ η εγγραφή προς εισαγωγή προσδιορίζεται από τη δομή Record. Η τιμή του κάθε πεδίου προστίθεται στο τέλος του αντίστοιχου αρχείου, μετά την τρέχουσα τελευταία τιμή που υπήρχε. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση -1. void CS_GetAllEntries( HeaderInfo* header_info, /* δομή ανοιχτών αρχείων */ char *fieldname, /* όνομα του πεδίου για το οποίο γίνεται ο έλεγχος */ void *value, /* τιμή του πεδίου προς σύγκριση */ char **fieldnames, /* ποια πεδία να επιστρέφονται για κάθε value */ int n /* το πλήθος των πεδίων του πίνακα fieldnames*/) Η συνάρτηση αυτή χρησιμοποιείται για την εκτύπωση όλων των εγγραφών οι οποίες έχουν τιμή στο πεδίο με όνομα fieldname ίση με value. Οι αναγνωριστικοί αριθμοί ανοίγματος αρχείων δίνονται στη δομή HeaderInfo. Η παράμετρος fieldname μπορεί να πάρει για τιμή κάποιο από τα ονόματα των πεδίων της εγγραφής. Σε περίπτωση που η τιμή του fieldname και του value είναι ίση με NULL, να εκτυπώνονται όλες οι εγγραφές. Να εκτυπώνεται επίσης το πλήθος των μπλοκ που διαβάστηκαν. Καλείστε να γράψετε και να παραδώσετε κώδικα που να αποδεικνύει την ορθότητα του προγράμματός σας χρησιμοποιώντας τα αρχεία δεδομένων που έχουν δοθεί. Σχόλια για την Υλοποίηση Όπως πάντοτε, αναμένεται καλός σχολιασμός του προγράμματος, και εσωτερικός (ανάμεσα στις γραμμές κώδικα) και εξωτερικός (στην αρχή κάθε ρουτίνας). Ένας γενικός κανόνας είναι να σχολιάζετε τα προγράμματά σας σαν να πρόκειται να τα δώσετε σε κάποιον άλλον ο οποίος θα τα επεκτείνει και ο οποίος δεν έχει ιδέα για το τι κάνατε όταν τα γράφατε (και δεν μπορεί ούτε να σας βρει να σας ρωτήσει). Επίσης, θα πρέπει να ελέγχετε για διάφορα σφάλματα που μπορούν να προκύψουν και να βεβαιωθείτε ότι ο κώδικάς σας τερματίζει ομαλά, με μηνύματα που έχουν νόημα, σε όλες τις εισόδους που ικανοποιούν την παραπάνω περιγραφή. Λεπτομέρειες εργασίας και παράδοσής της Η εργασία είναι ομαδική, 2 ή 3 ατόμων. Γλώσσα υλοποίησης: C / C++ (Χωρίς χρήση STL και string) Περιβάλλον υλοποίησης: Θα χρησιμοποιήσετε το BF επίπεδο που σας δίνετε όπως στη προηγούμενη εργασία. Μπορείτε να αναπτύξετε την εργασίας σας σε Linux (gcc 4.3+) ή Windows (Visual Studio

2012) αλλά η εξέταση θα γίνει στα Linux της σχολής συνεπώς τα προγράμματά σας πρέπει να μεταγλωττίζονται και να τρέχουν στα Linux της σχολής. Παραδοτέα: Τα αρχεία πηγαίου κώδικα (sources) και τα αντίστοιχα αρχεία κεφαλίδας (headers) καθώς και αρχείο readme με περιγραφή / σχόλια πάνω στην υλοποίησή σας. Η παράδοση θα γίνει μέσω της πλατφόρμας e-class. Προθεσμία Παράδοσης: 25 Ιανουαρίου 2016, 11:59 μμ.