|
@@ -0,0 +1,91 @@
|
|
|
+import os
|
|
|
+import time
|
|
|
+import numpy as np
|
|
|
+import nixio as nix
|
|
|
+import matplotlib.pyplot as plt
|
|
|
+
|
|
|
+from tempfile import TemporaryDirectory
|
|
|
+from typing import List, Tuple
|
|
|
+
|
|
|
+
|
|
|
+def create_file(nixfile: nix.File) -> List[int]:
|
|
|
+ times = []
|
|
|
+ blk = nixfile.create_block("benchmark", "block")
|
|
|
+ grp = blk.create_group("benchmark", "group")
|
|
|
+ for idx in range(200):
|
|
|
+ da = blk.create_data_array(name=str(idx), array_type="array", data=[0])
|
|
|
+ t0 = time.time()
|
|
|
+ grp.data_arrays.append(da)
|
|
|
+ times.append(time.time() - t0)
|
|
|
+ return times
|
|
|
+
|
|
|
+
|
|
|
+def benchmark_retrieve_actual(nixfile: nix.File) -> Tuple[List[int], List[int], List[int]]:
|
|
|
+ create_file(nixfile)
|
|
|
+ by_name = []
|
|
|
+ by_id = []
|
|
|
+ by_idx = []
|
|
|
+ blk = nixfile.blocks[0]
|
|
|
+ for idx, da in enumerate(blk.data_arrays):
|
|
|
+ t0 = time.time()
|
|
|
+ blk.data_arrays[da.name]
|
|
|
+ by_name.append(time.time() - t0)
|
|
|
+
|
|
|
+ t0 = time.time()
|
|
|
+ blk.data_arrays[da.id]
|
|
|
+ by_id.append(time.time() - t0)
|
|
|
+
|
|
|
+ t0 = time.time()
|
|
|
+ blk.data_arrays[idx]
|
|
|
+ by_idx.append(time.time() - t0)
|
|
|
+ return by_name, by_id, by_idx
|
|
|
+
|
|
|
+
|
|
|
+def benchmark_retrieve_link(nixfile: nix.File) -> Tuple[List[int], List[int], List[int]]:
|
|
|
+ create_file(nixfile)
|
|
|
+ by_name = []
|
|
|
+ by_id = []
|
|
|
+ by_idx = []
|
|
|
+ blk = nixfile.blocks[0]
|
|
|
+ grp = blk.groups[0]
|
|
|
+ for idx, da in enumerate(grp.data_arrays):
|
|
|
+ t0 = time.time()
|
|
|
+ grp.data_arrays[da.name]
|
|
|
+ by_name.append(time.time() - t0)
|
|
|
+
|
|
|
+ t0 = time.time()
|
|
|
+ grp.data_arrays[da.id]
|
|
|
+ by_id.append(time.time() - t0)
|
|
|
+
|
|
|
+ t0 = time.time()
|
|
|
+ grp.data_arrays[idx]
|
|
|
+ by_idx.append(time.time() - t0)
|
|
|
+ return by_name, by_id, by_idx
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ with TemporaryDirectory() as tmpdir:
|
|
|
+ with nix.File(os.path.join(tmpdir, "retrieve"), nix.FileMode.Overwrite) as nixfile:
|
|
|
+ by_name, by_id, by_idx = benchmark_retrieve_actual(nixfile)
|
|
|
+ plt.figure("Retrieval times from block.data_arrays")
|
|
|
+ plt.plot(by_name, ".", label="by name")
|
|
|
+ plt.plot(by_id, ".", label="by ID")
|
|
|
+ plt.plot(by_idx, ".", label="by index")
|
|
|
+ plt.legend()
|
|
|
+ plt.xlabel("Item index")
|
|
|
+ plt.ylabel("Time (s)")
|
|
|
+
|
|
|
+ with TemporaryDirectory() as tmpdir:
|
|
|
+ with nix.File(os.path.join(tmpdir, "link-retrieve"), nix.FileMode.Overwrite) as nixfile:
|
|
|
+ by_name, by_id, by_idx = benchmark_retrieve_link(nixfile)
|
|
|
+ plt.figure("Retrieval times from group.data_arrays")
|
|
|
+ plt.plot(by_name, ".", label="by name")
|
|
|
+ plt.plot(by_id, ".", label="by ID")
|
|
|
+ plt.plot(by_idx, ".", label="by index")
|
|
|
+ plt.legend()
|
|
|
+ plt.xlabel("Item index")
|
|
|
+ plt.ylabel("Time (s)")
|
|
|
+ plt.show()
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ main()
|