Last active
April 16, 2023 15:41
-
-
Save MariusWirtz/3de4c4bc845ddbf2a3c8e7d506bc706e to your computer and use it in GitHub Desktop.
tm1py-1.11-write-performance.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime | |
from datetime import timedelta | |
from TM1py.Objects.Cube import Cube | |
from TM1py.Objects.Dimension import Dimension | |
from TM1py.Objects.Hierarchy import Hierarchy | |
from TM1py.Services.TM1Service import TM1Service | |
tm1_params = { | |
"address": "", | |
"port": 8010, | |
"ssl": True, | |
"user": "Admin", | |
"password": "apple" | |
} | |
CUBE = "TM1py Cube" | |
SAMPLE_SIZE = 5 | |
def setup(tm1: TM1Service): | |
hierarchy = Hierarchy("TM1py Dimension 1", "TM1py Dimension 1") | |
hierarchy.remove_all_elements() | |
for e in range(1_000_000): | |
element = str(e).zfill(7) | |
hierarchy.add_element(element, "Numeric") | |
dimension = Dimension(name="TM1py Dimension 1", hierarchies=[hierarchy]) | |
tm1.dimensions.update_or_create(dimension) | |
hierarchy = Hierarchy("TM1py Dimension 2", "TM1py Dimension 2") | |
hierarchy.add_element("Measure", "Numeric") | |
dimension = Dimension(name="TM1py Dimension 2", hierarchies=[hierarchy]) | |
tm1.dimensions.update_or_create(dimension) | |
cube = Cube(name="TM1py Cube", dimensions=["TM1py Dimension 1", "TM1py Dimension 2"]) | |
tm1.cubes.update_or_create(cube) | |
print("Created Cube") | |
with TM1Service(**tm1_params) as tm1: | |
setup(tm1) | |
cells = dict() | |
element2 = "Measure" | |
for e in range(1_000_000): | |
element1 = str(e).zfill(7) | |
value = e | |
cells[element1, element2] = value | |
elapsed_time = timedelta() | |
for _ in range(SAMPLE_SIZE): | |
tm1.processes.execute_ti_code([f"cubecleardata('{CUBE}');"]) | |
before = datetime.now() | |
tm1.cells.write(CUBE, cells, use_ti=True) | |
elapsed_time += datetime.now() - before | |
print(f"write with use_ti=True: {elapsed_time / SAMPLE_SIZE}") | |
elapsed_time = timedelta() | |
for _ in range(SAMPLE_SIZE): | |
tm1.processes.execute_ti_code([f"cubecleardata('{CUBE}');"]) | |
before = datetime.now() | |
tm1.cells.write(CUBE, cells, use_blob=True) | |
elapsed_time += datetime.now() - before | |
print(f"write with use_blob=True: {elapsed_time / SAMPLE_SIZE}") | |
tm1.processes.execute_ti_code([f"cubecleardata('{CUBE}');"]) | |
elapsed_time = timedelta() | |
for _ in range(SAMPLE_SIZE): | |
tm1.processes.execute_ti_code([f"cubecleardata('{CUBE}');"]) | |
before = datetime.now() | |
tm1.cells.write_async(CUBE, cells, max_workers=4, slice_size=250_000) | |
elapsed_time += datetime.now() - before | |
print(f"write_async: {elapsed_time / SAMPLE_SIZE}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment