Skip to content

Commit 9dafab6

Browse files
tweaks and fixes
1 parent 03da267 commit 9dafab6

12 files changed

+35
-86
lines changed

city.c

-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ city_t *read_city(int fileNum)
6565
void write_city(int fileNum, city_t *city)
6666
{
6767
// set up file
68-
mkdir("cities", 0777);
6968
FILE *fp;
7069
char filename[1024];
7170
sprintf(filename, "cities/city_%08d.dat", fileNum);

datestamp.c

-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ datestamp_t *read_datestamp(int fileNum)
6464
void write_datestamp(int fileNum, datestamp_t *datestamp)
6565
{
6666
// set up file
67-
mkdir("datestamps", 0777);
6867
FILE *fp;
6968
char filename[1024];
7069
sprintf(filename, "datestamps/datestamp_%08d.dat", fileNum);

int_node.c

-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ int_node_t *read_node(int fileNum, int tableType)
9191

9292
void write_node(int fileNum, int_node_t *node) {
9393
// set up file
94-
mkdir("bplus", 0777);
9594
FILE *fp;
9695
char filename[1024];
9796
filename_for_node(filename, node->tableType, fileNum);

int_node.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include <stdbool.h>
77

88
// Change this value to adjust the fan-out of the b+ trees
9-
#define FAN_OUT 2
9+
#define FAN_OUT 200
1010

1111
#define TEXT_SHORT 64
1212
#define TEXT_LONG 1024

make_bplus_trees.c

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include <stdio.h>
22
#include <sys/time.h>
3+
#include <sys/stat.h>
4+
#include <sys/types.h>
35

46
#include "record.h"
57
#include "user.h"
@@ -18,6 +20,8 @@ int main(int argc, char **argv)
1820
struct timeval sysTimeStart, sysTimeEnd;
1921
gettimeofday(&sysTimeStart, NULL);
2022

23+
mkdir("bplus", 0777);
24+
2125
int i;
2226
// open file count information
2327
file_count_t *fc = read_file_count();

make_tables.c

+11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
#include <sys/time.h>
44
#include <string.h>
55
#include <stdbool.h>
6+
#include <sys/stat.h>
7+
#include <sys/types.h>
68

79
#include "record.h"
810
#include "user.h"
@@ -49,6 +51,15 @@ int main(int argc, char **argv)
4951
struct timeval sysTimeStart, sysTimeEnd;
5052
gettimeofday(&sysTimeStart, NULL);
5153

54+
// set up directories;
55+
mkdir("cities", 0777);
56+
mkdir("datestamps", 0777);
57+
mkdir("messages", 0777);
58+
mkdir("states", 0777);
59+
mkdir("timestamps", 0777);
60+
mkdir("users", 0777);
61+
mkdir("bplus", 0777);
62+
5263
// set up some counters, etc.
5364
unsigned int recordCount = 0,
5465
userCount = 0,

message.c

+2-51
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ message_t *read_message(int fileNum)
6262
void write_message(int fileNum, message_t *message)
6363
{
6464
// set up file
65-
mkdir("messages", 0777);
6665
FILE *fp;
6766
char filename[1024];
6867
sprintf(filename, "messages/message_%08d.dat", fileNum);
@@ -94,56 +93,8 @@ void free_message(message_t *message)
9493
free(message);
9594
}
9695

97-
int compare_message_sorts(const void *a, const void *b)
96+
int compare_messages(const void *a, const void *b)
9897
{
9998
// compare by timestampId
100-
return (int) ((message_sort_t*)a)->timestampId - ((message_sort_t*)b)->timestampId;
99+
return (int) ((message_t*)a)->timestampId - ((message_t*)b)->timestampId;
101100
}
102-
103-
void presort_message(int fileNum)
104-
{
105-
char old[1024];
106-
sprintf(old, "messages/message_%08d.dat", fileNum);
107-
char new[1024];
108-
sprintf(new, "messages/presort_message_%08d.dat", fileNum);
109-
rename(old, new);
110-
}
111-
112-
message_t *read_presorted_message(int fileNum)
113-
{
114-
// set up file
115-
FILE *fp;
116-
char filename[1024];
117-
sprintf(filename, "messages/presort_message_%08d.dat", fileNum);
118-
119-
// open file
120-
fp = fopen(filename, "rb");
121-
122-
if (!fp) {
123-
fprintf(stderr, "Cannot open %s\n", filename);
124-
exit(0);
125-
}
126-
127-
message_t *message = (message_t *)malloc(sizeof(message_t));
128-
129-
// read message
130-
fread(&(message->messageId), sizeof(int), 1, fp);
131-
fread(&(message->userId), sizeof(int), 1, fp);
132-
fread(&(message->timestampId), sizeof(int), 1, fp);
133-
fread(&(message->datestampId), sizeof(int), 1, fp);
134-
fread(&(message->text[0]), sizeof(char), TEXT_LONG, fp);
135-
136-
fclose(fp);
137-
138-
return message;
139-
}
140-
141-
void unpresort_message(int presortFileNum, int newFileNum)
142-
{
143-
char old[1024];
144-
sprintf(old, "messages/presort_message_%08d.dat", presortFileNum);
145-
char new[1024];
146-
sprintf(new, "messages/message_%08d.dat", newFileNum);
147-
rename(old, new);
148-
}
149-

message.h

+1-10
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,7 @@ void write_message(int fileNum, message_t *message);
2525

2626
void free_message(message_t *message);
2727

28-
// sorting wrapper
29-
typedef struct {
30-
int fileNum;
31-
int timestampId;
32-
} message_sort_t;
33-
34-
int compare_message_sorts(const void *a, const void *b);
35-
36-
void presort_message(int fileNum);
28+
int compare_messages(const void *a, const void *b);
3729

38-
void unpresort_message(int presortFileNum, int newFileNum);
3930

4031
#endif

sort_tables.c

+16-18
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
int main(int argc, char **argv)
1717
{
1818
printf("Sorting tables starting...\n");
19-
19+
2020
// time the program
2121
struct timeval sysTimeStart, sysTimeEnd;
2222
gettimeofday(&sysTimeStart, NULL);
@@ -140,48 +140,46 @@ int main(int argc, char **argv)
140140
}
141141

142142
// messages
143-
// note: this sort is quite a bit different since we cant dump all 1.9 million messages into memory.
143+
// note: this sort uses the heap
144144
{
145145
printf("Sorting %d messages\n", fc->messages);
146146

147+
147148
// time this section
148149
struct timeval startSysTimeSub, endSysTimeSub;
149150
gettimeofday(&startSysTimeSub, NULL);
150151

151152
// get count
152153
int count = fc->messages;
153-
message_sort_t message_sorts[count];
154+
message_t *messages = malloc(sizeof(message_t) * count);
154155

155-
// read into temp struct/array, rename file
156+
// read
156157
for (i = 0; i < count; i++)
157158
{
158-
message_t *msg = read_message(i);
159-
presort_message(i);
160-
161-
message_sort_t tmp;
162-
tmp.fileNum = i;
163-
tmp.timestampId = msg->timestampId;
164-
165-
message_sorts[i] = tmp;
166-
free_message(msg);
159+
message_t *tmp = read_message(i);
160+
messages[i] = *tmp;
161+
free_message(tmp);
167162
}
168163

169164
// sort
170-
qsort(message_sorts, count, sizeof(message_sorts[0]), compare_message_sorts);
165+
qsort(messages, count, sizeof(messages[0]), compare_messages);
171166

172-
// rename back in sorted order
167+
// write
173168
for (i = 0; i < count; i++)
174169
{
175-
unpresort_message(message_sorts[i].fileNum, i);
170+
write_message(i, &messages[i]);
171+
//print_city(&cities[i]);
176172
}
177173

174+
free(messages);
175+
178176
// end timing this section
179177
gettimeofday(&endSysTimeSub, NULL);
180178
float totalTime = (endSysTimeSub.tv_sec - startSysTimeSub.tv_sec)
181179
+ (endSysTimeSub.tv_usec - startSysTimeSub.tv_usec) / 1000000.0f;
182180
printf("Table process time %f seconds\n", totalTime);
183181
}
184-
182+
185183
// timestamps
186184
{
187185
printf("Sorting %d timestamps\n", fc->timestamps);
@@ -256,7 +254,7 @@ int main(int argc, char **argv)
256254
+ (endSysTimeSub.tv_usec - startSysTimeSub.tv_usec) / 1000000.0f;
257255
printf("Table process time %f seconds\n", totalTime);
258256
}
259-
257+
260258
free_file_count(fc);
261259

262260
// end timing the program

state.c

-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ state_t *read_state(int fileNum)
6363
void write_state(int fileNum, state_t *state)
6464
{
6565
// set up file
66-
mkdir("states", 0777);
6766
FILE *fp;
6867
char filename[1024];
6968
sprintf(filename, "states/state_%08d.dat", fileNum);

timestamp.c

-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ timestamp_t *read_timestamp(int fileNum)
6161
void write_timestamp(int fileNum, timestamp_t *timestamp)
6262
{
6363
// set up file
64-
mkdir("timestamps", 0777);
6564
FILE *fp;
6665
char filename[1024];
6766
sprintf(filename, "timestamps/timestamp_%08d.dat", fileNum);

user.c

-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ user_t *read_user(int fileNum)
6565
void write_user(int fileNum, user_t *user)
6666
{
6767
// set up file
68-
mkdir("users", 0777);
6968
FILE *fp;
7069
char filename[1024];
7170
sprintf(filename, "users/user_%08d.dat", fileNum);

0 commit comments

Comments
 (0)