run memray in unit tests
see https://github.com/huggingface/dataset-viewer/actions/runs/9270470931/job/25503544322?pr=2863#step:8:169 for example:

```
================================ MEMRAY REPORT =================================
Allocation results for tests/test_simple_cache.py::test_big_row at the high watermark

	 📦 Total memory allocated: 318.7MiB
	 📏 Total allocations: 16
	 📊 Histogram of allocation sizes: |█▃   |
	 🥇 Biggest allocating functions:
		- _op_msg:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pymongo/message.py:762 -> 223.4MiB
		- test_big_row:/home/runner/work/dataset-viewer/dataset-viewer/libs/libcommon/tests/test_simple_cache.py:359 -> 95.4MiB
		- getaddrinfo:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/socket.py:954 -> 1.5KiB
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/mongoengine/queryset/base.py:90 -> 1.1KiB
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/mongoengine/queryset/base.py:90 -> 1.1KiB


Allocation results for tests/test_url_signer.py::test_sign_urls_in_first_rows_in_place[audio] at the high watermark

	 📦 Total memory allocated: 90.9MiB
	 📏 Total allocations: 8099
	 📊 Histogram of allocation sizes: |  █  |
	 🥇 Biggest allocating functions:
		- __call__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/llvmlite/binding/ffi.py:192 -> 2.0MiB
		- __call__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/llvmlite/binding/ffi.py:192 -> 1.9MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.8MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.8MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.3MiB


Allocation results for tests/viewer_utils/test_features.py::test_ogg_audio_with_s3 at the high watermark

	 📦 Total memory allocated: 24.3MiB
	 📏 Total allocations: 693
	 📊 Histogram of allocation sizes: | █   |
	 🥇 Biggest allocating functions:
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 5.8MiB
		- _load_file:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/botocore/loaders.py:178 -> 2.9MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 2.8MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 2.7MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.5MiB


Allocation results for tests/test_integration_s3_cloudfront.py::test_real_cloudfront at the high watermark

	 📦 Total memory allocated: 13.3MiB
	 📏 Total allocations: 422
	 📊 Histogram of allocation sizes: | █   |
	 🥇 Biggest allocating functions:
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 5.5MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 2.7MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 1.0MiB
		- load_ssl_context_verify:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/httpx/_config.py:145 -> 654.6KiB
		- load_ssl_context_verify:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/httpx/_config.py:145 -> 654.6KiB


Allocation results for tests/test_parquet_utils.py::test_rows_index_query_with_parquet_metadata at the high watermark

	 📦 Total memory allocated: 10.2MiB
	 📏 Total allocations: 25
	 📊 Histogram of allocation sizes: |▆█▂  |
	 🥇 Biggest allocating functions:
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:341 -> 18.1KiB
		- read_row_group:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:490 -> 9.1KiB
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:341 -> 7.9KiB
		- read_row_group:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:490 -> 1.3KiB


======================= 840 passed in 163.90s (0:02:43) ========================
```

This first step installs memray and runs it over pytest. I'm not sure it gives us insights for now. We might have to setup tests dedicated to ensuring the RAM stays below some limit, with `@pytest.mark.limit_memory()`, see https://bloomberg.github.io/memray/tutorials/additional_features.html#pytest-plugin
run memray in unit tests: see https://github.com/huggingface/dataset-viewer/actions/runs/9270470931/job/25503544322?pr=2863#step:8:169 for example:

```
================================ MEMRAY REPORT =================================
Allocation results for tests/test_simple_cache.py::test_big_row at the high watermark

	 📦 Total memory allocated: 318.7MiB
	 📏 Total allocations: 16
	 📊 Histogram of allocation sizes: |█▃   |
	 🥇 Biggest allocating functions:
		- _op_msg:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pymongo/message.py:762 -> 223.4MiB
		- test_big_row:/home/runner/work/dataset-viewer/dataset-viewer/libs/libcommon/tests/test_simple_cache.py:359 -> 95.4MiB
		- getaddrinfo:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/socket.py:954 -> 1.5KiB
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/mongoengine/queryset/base.py:90 -> 1.1KiB
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/mongoengine/queryset/base.py:90 -> 1.1KiB


Allocation results for tests/test_url_signer.py::test_sign_urls_in_first_rows_in_place[audio] at the high watermark

	 📦 Total memory allocated: 90.9MiB
	 📏 Total allocations: 8099
	 📊 Histogram of allocation sizes: |  █  |
	 🥇 Biggest allocating functions:
		- __call__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/llvmlite/binding/ffi.py:192 -> 2.0MiB
		- __call__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/llvmlite/binding/ffi.py:192 -> 1.9MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.8MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.8MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.3MiB


Allocation results for tests/viewer_utils/test_features.py::test_ogg_audio_with_s3 at the high watermark

	 📦 Total memory allocated: 24.3MiB
	 📏 Total allocations: 693
	 📊 Histogram of allocation sizes: | █   |
	 🥇 Biggest allocating functions:
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 5.8MiB
		- _load_file:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/botocore/loaders.py:178 -> 2.9MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 2.8MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 2.7MiB
		- _call_with_frames_removed:<frozen importlib._bootstrap>:228 -> 1.5MiB


Allocation results for tests/test_integration_s3_cloudfront.py::test_real_cloudfront at the high watermark

	 📦 Total memory allocated: 13.3MiB
	 📏 Total allocations: 422
	 📊 Histogram of allocation sizes: | █   |
	 🥇 Biggest allocating functions:
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 5.5MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 2.7MiB
		- raw_decode:/opt/hostedtoolcache/Python/3.9.18/x64/lib/python3.9/json/decoder.py:353 -> 1.0MiB
		- load_ssl_context_verify:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/httpx/_config.py:145 -> 654.6KiB
		- load_ssl_context_verify:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/httpx/_config.py:145 -> 654.6KiB


Allocation results for tests/test_parquet_utils.py::test_rows_index_query_with_parquet_metadata at the high watermark

	 📦 Total memory allocated: 10.2MiB
	 📏 Total allocations: 25
	 📊 Histogram of allocation sizes: |▆█▂  |
	 🥇 Biggest allocating functions:
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:341 -> 18.1KiB
		- read_row_group:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:490 -> 9.1KiB
		- __init__:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:341 -> 7.9KiB
		- read_row_group:/home/runner/.cache/pypoetry/virtualenvs/libcommon-V4ce2JTs-py3.9/lib/python3.9/site-packages/pyarrow/parquet/core.py:490 -> 1.3KiB


======================= 840 passed in 163.90s (0:02:43) ========================
```

This first step installs memray and runs it over pytest. I'm not sure it gives us insights for now. We might have to setup tests dedicated to ensuring the RAM stays below some limit, with `@pytest.mark.limit_memory()`, see https://bloomberg.github.io/memray/tutorials/additional_features.html#pytest-plugin