* Sebastian Hammer, Adam Dickmeiss
*
* $Log: isamc.h,v $
- * Revision 1.6 1997-09-17 12:19:10 adam
+ * Revision 1.7 1998-03-13 15:30:50 adam
+ * New functions isc_block_used and isc_block_size. Fixed 'leak'
+ * in isc_alloc_block.
+ *
+ * Revision 1.6 1997/09/17 12:19:10 adam
* Zebra version corresponds to YAZ version 1.4.
* Changed Zebra server so that it doesn't depend on global common_resource.
*
int isc_pp_read (ISAMC_PP pp, void *buf);
int isc_pp_num (ISAMC_PP pp);
+int isc_block_used (ISAMC is, int type);
+int isc_block_size (ISAMC is, int type);
+
#define isc_type(x) ((x) & 7)
#define isc_block(x) ((x) >> 3)
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: invstat.c,v $
- * Revision 1.6 1998-03-06 13:54:02 adam
+ * Revision 1.7 1998-03-13 15:30:50 adam
+ * New functions isc_block_used and isc_block_size. Fixed 'leak'
+ * in isc_alloc_block.
+ *
+ * Revision 1.6 1998/03/06 13:54:02 adam
* Fixed two nasty bugs in isc_merge.
*
* Revision 1.5 1997/09/17 12:19:13 adam
struct inv_stat_info {
ISAM isam;
ISAMC isamc;
+ int no_isam_entries[8];
int no_dict_entries;
int no_dict_bytes;
int isam_bounds[20];
static int inv_stat_handle (char *name, const char *info, int pos,
void *client)
{
- int occur;
+ int occur = 0;
int i = 0;
struct inv_stat_info *stat_info = (struct inv_stat_info*) client;
ISAM_P isam_p;
pp = isc_pp_open (stat_info->isamc, isam_p);
occur = isc_pp_num (pp);
-#if 1
while (isc_pp_read(pp, buf))
occurx++;
assert (occurx == occur);
-#endif
+ stat_info->no_isam_entries[isc_type(isam_p)] += occur;
isc_pp_close (pp);
}
while (occur > stat_info->isam_bounds[i] && stat_info->isam_bounds[i])
i++;
++(stat_info->isam_occurrences[i]);
-
return 0;
}
}
records = rec_open (bfs, 0);
+ for (i = 0; i<8; i++)
+ stat_info.no_isam_entries[i] = 0;
stat_info.no_dict_entries = 0;
stat_info.no_dict_bytes = 0;
stat_info.isam = isam;
stat_info.isam_bounds[0] = 1;
stat_info.isam_bounds[1] = 2;
stat_info.isam_bounds[2] = 3;
- stat_info.isam_bounds[3] = 5;
+ stat_info.isam_bounds[3] = 6;
stat_info.isam_bounds[4] = 10;
stat_info.isam_bounds[5] = 20;
stat_info.isam_bounds[6] = 30;
dict_scan (dict, term_dict, &before, &after, &stat_info, inv_stat_handle);
- rec_close (&records);
- dict_close (dict);
- if (isam)
- is_close (isam);
if (isamc)
- isc_close (isamc);
-
- fprintf (stderr, "%d dictionary entries. %d bytes for strings\n",
+ {
+ fprintf (stderr, " Blocks Occur Size KB Bytes/Entry\n");
+ for (i = 0; isc_block_used (isamc, i) >= 0; i++)
+ {
+ fprintf (stderr, " %8d %8d", isc_block_used (isamc, i),
+ stat_info.no_isam_entries[i]);
+
+ if (stat_info.no_isam_entries[i])
+ fprintf (stderr, " %8d %f",
+ (int) ((1023.0 + (double) isc_block_used(isamc, i) *
+ isc_block_size(isamc,i))/1024),
+ ((double) isc_block_used(isamc, i) *
+ isc_block_size(isamc,i))/
+ stat_info.no_isam_entries[i]);
+ fprintf (stderr, "\n");
+ }
+ }
+
+ fprintf (stderr, "\n%d words using %d bytes\n",
stat_info.no_dict_entries, stat_info.no_dict_bytes);
- fprintf (stderr, " size occurrences\n");
+ fprintf (stderr, " Occurrences Words\n");
prev = 1;
for (i = 0; stat_info.isam_bounds[i]; i++)
{
}
fprintf (stderr, "%7d- %7d\n",
prev, stat_info.isam_occurrences[i]);
+
+ rec_close (&records);
+ dict_close (dict);
+
+ if (isam)
+ is_close (isam);
+ if (isamc)
+ isc_close (isamc);
+
}
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: isamc.c,v $
- * Revision 1.10 1998-03-11 11:18:18 adam
+ * Revision 1.11 1998-03-13 15:30:50 adam
+ * New functions isc_block_used and isc_block_size. Fixed 'leak'
+ * in isc_alloc_block.
+ *
+ * Revision 1.10 1998/03/11 11:18:18 adam
* Changed the isc_merge to take into account the mfill (minimum-fill).
*
* Revision 1.9 1998/03/06 13:54:02 adam
{ 32, 28, 0, 3 },
{ 64, 54, 30, 0 },
#else
- { 32, 28, 20, 20 },
- { 512, 490, 340, 20 },
- { 4096, 3950, 3200, 20 },
+ { 32, 28, 24, 20 },
+ { 512, 490, 350, 20 },
+ { 4096, 3950, 4200, 20 },
{32768, 32000, 30000, 0 },
#endif
};
return is;
}
+int isc_block_used (ISAMC is, int type)
+{
+ if (type < 0 || type >= is->no_files)
+ return -1;
+ return is->files[type].head.lastblock-1;
+}
+
+int isc_block_size (ISAMC is, int type)
+{
+ ISAMC_filecat filecat = is->method->filecat;
+ if (type < 0 || type >= is->no_files)
+ return -1;
+ return filecat[type].bsize;
+}
+
int isc_close (ISAMC is)
{
int i;
if ((nb = is->files[cat].fc_list[j]) && (!block || nb < block))
{
is->files[cat].fc_list[j] = 0;
+ block = nb;
break;
}
}