## 4 Performance Evaluation
### Performance Tuning of WR-Store  
The empirical analysis indicates that WR-Store has the best parameter setting for a given data set. Performance of WR-Store as \(WR_{D}\times WR_{L}\) is varied: Figure 7 shows the processing time of WR-Store where \(WR_{D}\times WR_{L}\) is 2, 4, and 6 as the number of continuous operations \(k\) is varied from 1 to 1 million. We use \(KVData\) as the data set. As \(WR_{D}\times WR_{L}\) is increased, each key may have less values because the number of distinct registry keys is increased. Hence, when \(WR_{D}\times WR_{L}\) is small, we need to process a large number of values for the same key, incurring the cost to deal with many values after finding the specified registry. In contrast, when \(WR_{D}\times WR_{L}\) is large, we have only a small number of values for the same key (e.g., one value for each key), and consequently, have many subkeys. It requires a large size of the registry index, incurring the cost to access the large registry index. As a result, we can expect that there exists a moderate value for \(WR_{D}\times WR_{L}\) that shows the best performance of WR-Store. For the read operations, the performance of \(2D\_2L\) is the most stable as \(k\) increases. Especially, \(2D\_2L\) is much more efficient than \(2D\_1L\) by 10.41 times and \(2D\_3L\) by 11.39 times when \(k\) is 1 million. For the write operations, \(2D\_2L\) is the most efficient. Specifically, \(2D\_2L\) outperforms \(2D\_1L\) by 4.12\(\sim\)12.77 times and \(2D\_3L\) by 3.51\(\sim\)12.85 times as \(k\) is varied. For the delete operations, \(2D\_1L\) is generally the most efficient, but \(2D\_2L\) shows the most stable performance. Specifically, when \(k\) is varied from 100 thousand to 1 million, the performance degradation of \(2D\_1L\) is about 21.47% while that of \(2D\_2L\) is only about 2.25%. According to the experimental results, we observe that the performance variation of WR-Store is very severe as \(WR_{D}\times WR_{L}\) is varied. In addition, we show that \(2D\_2L\) is the most stable and efficient performance. Figure 6: Performance of WR-Store as \(WR_{L}\) is varied. (**a**) Read throughput; (**b**) Write throughput; (**c**) Delete throughput. Figure 7: Performance of WR-Store as \(WR_{D}\times WR_{L}\) is varied. (**a**) Read throughput; (**b**) Write throughput; (**c**) Delete throughput. Performance of WR-Store as \(WR_{L}\) and \(WR_{D}\) are varied: According to the previous result, the total length of a registry path for indexing, \(WR_{L}\times WR_{D}\), is fixed as 4. Then, we vary \(WR_{L}\) and \(WR_{D}\) to find the best combination of \(WR_{L}\) and \(WR_{D}\) for a determined \(WR_{L}\times WR_{D}\). That is, we have three combinations of \(WR_{L}\) and \(WR_{D}\): (1) \(1D\_4L\), (2) \(2D\_2L\), and (3) \(4D\_1L\). Figure 8 shows the processing time of \(1D\_4L\), \(2D\_2L\), and \(4D\_1L\) as the number of continuous operations \(k\) is varied from 1 to 1 million. We use \(KVData\) as the data set. Even if the overall performance difference is less than the case where \(WR_{D}\times WR_{L}\) is varied, there exists meaningful performance difference as \(WR_{L}\) and \(WR_{D}\) are varied. For the read operations, \(1D\_4L\) is the most efficient. When \(k\) is 1 million, \(1D\_4L\) outperforms \(2D\_2L\) by 2.21 times and \(4D\_1L\) 1.81 times. For the write operations, \(1D\_4L\) is slightly more efficient than the other settings. When \(k\) is 1 million, \(1D\_4L\) outperforms \(2D\_2L\) by 1.64 times and \(4D\_1L\) 1.39 times. For the delete operations, \(1D\_4L\) is the most efficient. When \(k\) is 1 million, \(1D\_4L\) outperforms \(2D\_2L\) by 1.55 times and \(4D\_1L\) outperforms by 1.55 times. According to both experimental results, we confirm that the performance variation of WR-Store is very serious as \(WR_{L}\) and \(WR_{D}\) are varied (especially for \(WR_{D}\times WR_{L}\)). Thus, for the remaining experiments on synthetic data sets, we use the best parameter setting for WR-Store, i.e., \(1D\_4L\).