Skip to content

Instantly share code, notes, and snippets.

@MariusWirtz
Last active April 16, 2023 15:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MariusWirtz/3de4c4bc845ddbf2a3c8e7d506bc706e to your computer and use it in GitHub Desktop.
Save MariusWirtz/3de4c4bc845ddbf2a3c8e7d506bc706e to your computer and use it in GitHub Desktop.
tm1py-1.11-write-performance.py
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