Πληροφορική & Τηλεπικοινωνίες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή. Interface της εφαρμογής. Κ24: Προγραμματισμός Συστήματος - 1η Εργασία, Εαρινό Εξάμηνο 2019 Προθεσμία Υποβολής: Παρασκευή 15 Μαρτίου, 23:59

Πληροφορική 2. Δομές δεδομένων και αρχείων

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

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

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

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

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

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

Ενδεικτική περιγραφή μαθήματος

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

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

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

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

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

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

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

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

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

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

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

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

Κεφ.11: Ευρετήρια και Κατακερματισμός

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

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

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

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

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

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

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

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

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

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

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

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στον δομημένο προγραμματισμό

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

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

Η γλώσσα προγραμματισμού C

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Transcript:

Πληροφορική & Τηλεπικοινωνίες K18 Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο 2012 2013 Καθηγητές. Γουνόπουλος, I. Iωαννίδης Άσκηση 2 Παράδοση: 31/5 Ο σκοπός της εργασίας αυτής είναι η κατανόηση των Συστημάτων Διαχείρισης Βάσεων Δεδομένων που βασίζονται στην τεχνική αποθήκευση κατά στήλες (column store) για την διαχείριση των δεδομένων. Mέσω της εργασίας αυτής θα γίνει αντιληπτό κάτω από ποιές προϋποθέσεις η τεχνική αυτή υπερτερεί της αποθήκευσης κατά γραμμές και που ενδείκνυται η χρήση της. Για πληροφορίες σχετικά με column stores, σας προτείνουμε να δείτε και τα παρακάτω: http://en.wikipedia.org/wiki/column oriented_dbms http://nms.csail.mit.edu/~stavros/pubs/tutorial2009 column_stores.pdf Η διαχείριση των αρχείων γίνεται µέσω των συναρτήσεων µε το πρόθεµα CS_ (column store). Tις εγγραφές τις διαχειρίζεστε µέσω των κατάλληλων συναρτήσεων. Τα πρωτότυπα (definitions) των συναρτήσεων που καλείστε να υλοποιήσετε δίνονται στη συνέχεια µαζί µε επεξήγηση για τη λειτουργικότητα της κάθε µίας. Για τον κατακερματισμό θα ξεκινήσετε με αρχικό ολικό βάθος ευρετηρίου depth = 3, δηλαδή το ευρετήριο θα έχει 8 μπλοκς. Όπως και στην προηγούμενη άσκηση, οι συναρτήσεις της βιβλιοθήκης επιπέδου µπλοκ θα σας δίνονται έτοιμες. Οι εγγραφές είναι της ίδιας µορφής με την πρώτη άσκηση, και συγκεκριµένα έχουν τη µορφή που δίνεται στη συνέχεια. typedef struct{ int id, char name[15], char surname[20], char status[1], char dateofbirth[11], int salary, char section[1], int daysoff, int prevyears; } Record; Μία από τις βασικές διαφορές των column stores είναι ο τρόπος αποθήκευσης των εγγραφών. Στις κλασικές βάσεις δεδομένων, όλα τα πεδία μιας εγγραφής αποθηκεύονται στο ίδιο αρχείο. Στα column stores, το κάθε πεδίο μιας εγγραφής αποθηκεύετε σε διαφορετικό αρχείο. Στα πλαίσια της άσκησης, το column store για τα 9 πεδία της εγγραφής Record, θα δημιουργεί 9 αρχεία, στα οποία θα αποθηκεύονται οι εγγραφές ως εξής: rowid id, rowid name, rowid surname, rowid status, rowiddateofbirth, rowid salary, rowid section, rowid daysoff, rowid prevyears. Το πρώτο µπλοκ (block) κάθε αρχείου, περιλαµβάνει ειδική πληροφορία σχετικά µε το ίδιο το αρχείο. Η πληροφορία αυτή χρησιµεύει στο να αναγνωρίσει κανείς το είδος του αρχείου, σε πληροφορία που αφορά το πεδίο κ.λπ.

Τέλος καλείστε να κάνετε μία σύγκριση με την προηγούμενη άσκηση και να σχολιάσετε την αναζήτηση σε αρχεία σωρού, αρχεία κατακερματισμού και αρχεία column store. Ποιά είναι τα πλεονεκτήματα και ποια τα μειονεκτήματα κάθε τρόπου αποθήκευσης των δεδομένων; Για παράδειγμα, μπορείτε να σκεφτείτε κάποια παραδείγματα και να κάνετε κάποια τρεξίματα που να φαίνονται τα δυνατά σημεία κάποιας μεθόδου, αντίστοιχα άλλα για να φαίνονται τα αδύναμα και αυτό να γίνει για κάθε μέθοδο. Καλό θα ήταν για κάθε τρέξιμο να συμπεριλάβετε το πλήθος των μπλοκς που διαβάστηκαν. Η τεκμηρίωση αυτή που θα μας στείλετε μπορεί να είναι κομμάτι του readme και θα πιάνει 10 μονάδες. Συναρτήσεις BF (Block File) Στη συνέχεια, περιγράφονται οι συναρτήσεις που αφορούν το επίπεδο από block, πάνω στο οποίο θα βασιστείτε για την υλοποίηση των συναρτήσεων που ζητούνται. Η υλοποίηση των συναρτήσεων αυτών θα δοθεί έτοιµη µε τη µορφή βιβλιοθήκης. Στο αρχείο κεφαλίδας BF.h που θα σας δοθεί υπάρχουν τα πρωτότυπα των συναρτήσεων µαζί µε σχόλια για το πώς δουλεύουν και το µέγεθος ενός µπλοκ που είναι BF_BLOCK_SIZE, ίσο µε 512 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) [μονάδες 80] Στη συνέχεια περιγράφονται οι συναρτήσεις που καλείστε να υλοποιήσετε στα πλαίσια της εργασίας αυτής και που αφορούν τα αρχεία column store. Όπου το κρίνετε εφικτό, μπορείτε να χρησιμοποιήσετε και τις συναρτήσεις για αρχεία σωρού που αναπτύξατε στην πρώτη άσκηση. int CS_CreateFiles( char **fieldnames /* τα πεδία της δομής Record */) Η συνάρτηση CS_CreateFiles χρησιµοποιείται για τη δηµιουργία και κατάλληλη αρχικοποίηση άδειων αρχείων, ένα για κάθε πεδίο που προσδιορίζεται από τον πίνακα fieldnames (και πρόκειται ουσιαστικά για τα πεδία της δομής Record). Τα ονόματα των αρχείων θα είναι της μορφής CSFile_όνομα πεδίου, π.χ. το αρχείο που θα περιέχει rowid name, θα ονομάζεται CSFile_name. Δεδομένου ότι σε αυτή την περίπτωση θα έχετε να διαχειριστείτε ταυτόχρονα πολλά αρχεία, ειδική πληροφορία εντοπισμού όλων των αρχείων θα αποθηκεύεται σε ένα νέο ειδικό αρχείο με όνομα π.χ. Header_Info σε ζεύγη της μορφής filename filedesc. Το αρχείο αυτό είστε ελέυθεροι να το δημιουργήσετε και διαχειριστείτε όπως θέλετε. Μπορείτε π.χ. να κάνετε πάλι χρήση των BF συναρτήσεων, είτε χρήση fopen κλπ., αρκεί να κρατάτε μία αντιστοίχιση: filename και filedesc. Σε περίπτωση που εκτελεστεί επιτυχώς η συνάρτηση, επιστρέφεται 0, αλλιώς 1. int CS_OpenFile( char *header_info /* όνοµα αρχείου με πληροφορία για όλα τα αρχεία */ ) Η συνάρτηση CS_OpenFile ανοίγει το αρχείο µε όνοµα header_info και επιστρέφει τον αναγνωριστικό αριθμό ανοίγματος του αρχείου αυτού. Επιπλέον, η συνάρτηση αυτή πρέπει από τις πληροφορίες που θα βρει στο header_info, να ανοίξει τα εν λόγω αρχεία και να διαβάσει από το πρώτο µπλοκ του κάθενος την πληροφορία που αφορά το αρχείο column store. Αποθηκεύει στο αρχείο header_info τον αναγνωριστικό αριθµό ανοίγµατος κάθε αρχείου, όπως αυτός επιστράφηκε από το επίπεδο διαχείρισης µπλοκ ή 1 σε περίπτωση σφάλµατος. Αν το αρχείο που ανοίχτηκε δεν πρόκειται για αρχείο columnstore, τότε αυτό θεωρείται επίσης περίπτωση σφάλµατος. Η συνάρτηση επιστρέφει 1 σε περίπτωση σφάλματος. int CS_CloseFile( int filedesc /* αναγνωριστικός αριθµός ανοίγµατος αρχείου header_info */ ) Η συνάρτηση CS_CloseFile βρίσκει το αρχείο header_info που προσδιορίζεται από τον αναγνωριστικό αριθµό ανοίγµατος filedesc και από αυτό βρίσκει τα filedesc των αρχείων που είναι ανοικτά και τα κλείνει και στην συνέχεια κλείνει και το header_info. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση 1. int CS_InsertEntry ( int filedesc /* αναγνωριστικός αριθµός ανοίγµατος αρχείου header_info*/ Record record /* εγγραφή προς εισαγωγή */ )

Η συνάρτηση CS_InsertEntry χρησιµοποιείται για την εισαγωγή µίας εγγραφής στα αρχεία column store. Η πληροφορία για τα αρχεία CS διαβάζεται από το αρχείο Header_Info το οποίο προσδιορίζεται από τον αναγνωριστικό αριθμό ανοίγματος filedesc, ενώ η εγγραφή προς εισαγωγή προσδιορίζεται από τη δοµή record. Η τιμή του κάθε πεδίου προστίθεται στο τέλος του αντίστοιχου αρχείου, µετά την τρέχουσα τελευταία τιμή που υπήρχε. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση 1. void CS_GetAllEntries( int filedesc, /* αναγνωριστικός αριθµός ανοίγµατος αρχείου header_info*/ char *fieldname, /* όνοµα του πεδίου για το οποίο γίνεται ο έλεγχος */ void *value, /* τιµή του πεδίου προς σύγκριση */ char **fieldnames, /* ποια πεδία να επιστρέφονται για κάθε value */ int n /* το πλήθος των πεδίων του πίνακα fieldnames*/) Η συνάρτηση αυτή χρησιµοποιείται για την εκτύπωση όλων των εγγραφών οι οποίες έχουν τιµή στο πεδίο µε όνοµα fieldname ίση µε value. Οι αναγνωριστικοί αριθµοί ανοίγµατος αρχείων δίνονται στο αρχείο Header_Info. Η παράμετρος fieldname μπορεί να πάρει για τιμή κάποιο από τα ονόματα των πεδίων της εγγραφής. Σε περίπτωση που η τιμή του fieldname και του value είναι ίση με NULL, να εκτυπώνονται όλες οι εγγραφές. Να εκτυπώνεται επίσης το πλήθος των µπλοκ που διαβάστηκαν. Για κάθε εγγραφή που έχει τιµή value στο πεδίο µε όνοµα fieldname, εκτυπώνονται τα πεδία που προσδιορίζονται στον πίνακα fieldnames. Ενδεικτικά, για πιθανή κλήση της συνάρτησης CS_GetAllEntries( Header_Info, name, Kostas, { id, name, salary }, 3) θα πρέπει να εκτυπώνονται εγγραφές της μορφής <his_id Kostas his_salary>. Συναρτήσεις CSHT (Hash Table for Column Store Files) [μονάδες 20] Στη συνέχεια περιγράφονται οι συναρτήσεις που καλείστε να υλοποιήσετε στα πλαίσια της εργασίας αυτής και που αφορούν τα αρχεία επεκτατού κατακερµατισµού βασισμένα στα αρχεία column store. Όπου το κρίνετε εφικτό, μπορείτε να χρησιμοποιήσετε και τις συναρτήσεις ευρετηρίασης που αναπτύξατε στην πρώτη άσκηση. int CSHT_CreateIndex( char *filename, /* όνοµα αρχείου */ char attrtype, /* τύπος πεδίου κλειδιού: 'c', 'i' */ char *attrname, /* όνοµα πεδίου κλειδιού */ int attrlength, /* µήκος πεδίου κλειδιού */ int depth /* το ολικό βάθος του ευρετηρίου */ )

Η συνάρτηση CSHT_CreateIndex χρησιµοποιείται για τη δηµιουργία και κατάλληλη αρχικοποίηση ενός άδειου αρχείου κατακερµατισµού µε όνοµα filename. Το αρχείο ευρετηρίου θα βασιστεί στο αντίστοιχο αρχείο CSFile_attrName. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση 1. CSHT_info* CSHT_OpenIndex( char *filename /* όνοµα αρχείου */ ) Η συνάρτηση CSHT_OpenIndex ανοίγει το αρχείο µε όνοµα filename και διαβάζει από το πρώτο µπλοκ την πληροφορία που αφορά το αρχείο κατακερµατισµού. Κατόπιν, ενηµερώνετε µια δοµή όπου κρατάτε όσες πληροφορίες κρίνετε αναγκαίες για το αρχείο αυτό προκειµένου να µπορείτε να επεξεργαστείτε στη συνέχεια τις εγγραφές του. Μια ενδεικτική δοµή µε τις πληροφορίες που πρέπει να κρατάτε δίνεται στη συνέχεια: typedef struct { int filedesc; /*αναγνωριστικός αριθµός ανοίγµατος αρχείου από το επίπεδο block*/ char attrtype; /*τύπος του πεδίου που είναι κλειδί για το συγκεκριµένο αρχείο, 'c' ή 'i'*/ char* attrname; /* το όνοµα του πεδίου που είναι το κλειδί για το συγκεκριµένο αρχείο */ int attrlength; /* το µέγεθος του πεδίου που είναι κλειδί για το συγκεκριµένο αρχείο */ int depth; /* το ολικό βάθος του ευρετηρίου */ } CSHT_info; Όπου attrtype, attrname, και attrlength αφορούν το πεδίο κλειδί, filedesc είναι ο αναγνωριστικός αριθµός του ανοίγµατος του αρχείου, όπως επιστράφηκε από το επίπεδο διαχείρισης µπλοκ, και depth είναι το αρχικό ολικό βάθος του ευρετηρίου. Αφού ενηµερωθεί κατάλληλα η δοµή πληροφοριών του αρχείου, την επιστρέφετε. Σε περίπτωση που συµβεί οποιοδήποτε σφάλµα, επιστρέφεται τιµή NULL. Αν το αρχείο που δόθηκε για άνοιγµα δεν αφορά αρχείο κατακερµατισµού, τότε αυτό επίσης θεωρείται σφάλµα. int CSHT_CloseIndex( CSHT_info* header_info ) Η συνάρτηση CSHT_CloseIndex κλείνει το αρχείο που προσδιορίζεται µέσα στη δοµή header_info. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση 1. Η συνάρτηση είναι υπεύθυνη και για την αποδέσµευση της µνήµης που καταλαµβάνει η δοµή που περάστηκε ως παράµετρος, στην περίπτωση που το κλείσιµο πραγµατοποιήθηκε επιτυχώς. int CSHT_InsertEntries ( char *header_filename, /* το αρχείο γενικής πληροφορίας Header_Info */ CSHT_info *header_info, /* επικεφαλίδα του αρχείου*/ ) Η συνάρτηση CSHT_InsertEntries χρησιµοποιείται για την εισαγωγή εγγραφών στο αρχείο κατακερµατισµού. Οι πληροφορίες που αφορούν το αρχείο βρίσκονται στη δοµή header_info, ενώ οι

εγγραφές προς εισαγωγή βρίσκονται στο αρχείο CSFile_attrName που έχει δημιουργηθεί πριν το ευρετήριο. Οι εγγραφές πλέον είναι της μορφής rowid πεδίο_κλειδί. Σε περίπτωση που εκτελεστεί επιτυχώς, επιστρέφεται 0, ενώ σε διαφορετική περίπτωση 1. void CSHT_GetAllEntries( CSHT_info *header_info, /* επικεφαλίδα του αρχείου / void *value, /* τιµή του πεδίου κλειδιού προς αναζήτηση */ char **fieldnames, /* ποια πεδία να επιστρέφονται για κάθε value */ int n /* το πλήθος των παραπάνω πεδίων */) Η συνάρτηση αυτή χρησιµοποιείται για την εκτύπωση όλων των εγγραφών που υπάρχουν στο αρχείο κατακερµατισµού οι οποίες έχουν τιµή στο πεδίο κλειδί ίση µε value. Αν η τιμή του value είναι ίση με NULL, να εκτυπώνονται όλες οι εγγραφές. Η πρώτη δοµή δίνει πληροφορία για το αρχείο κατακερµατισµού, όπως αυτή είχε επιστραφεί από την CSHT_OpenIndex. Για κάθε εγγραφή που υπάρχει στο αρχείο και έχει τιµή στο πεδίο κλειδί (όπως αυτό ορίζεται στην CSHT_info) ίση µε value, να εκτυπώνονται τα πεδία που προσδιορίζονται από τον πίνακα fieldnames. Να εκτυπώνεται επίσης το πλήθος των µπλοκ που διαβάστηκαν. Παράδοση εργασίας Η εργασία μπορεί να υλοποιηθεί από ομάδες 1 έως 3 άτομα. Γλώσσα υλοποίησης: C / C++ Περιβάλλον υλοποίησης: Linux (gcc 4.3+) ή Windows (Visual Studio 2008). Η επιλογή έγινε µε βάση τα διαθέσιµα εργαλεία ανάπτυξης που υπάρχουν στη σχολή. Παραδοτέα: Τα αρχεία πηγαίου κώδικα (sources) και τα αντίστοιχα αρχεία κεφαλίδας (headers) καθώς και README αρχείο µε περιγραφή / σχόλια πάνω στην υλοποίησή σας. Ο φάκελος να έχει σαν όνομα τα std της ομάδας. Ηµεροµηνία Παράδοσης: 31 5 2013