Tuning Writes

Write Layout

The most efficient layout to write in is global order, as TileDB will not need to sort and re-organize the written cells internally. Row-major, col-major and unordered layouts require sorting and thus more work for TileDB. In general, the write layout and the sub-domain in which the write occurs must coincide as much as possible with the space tiles and the global order.

Write Size

The larger the writes, the better for performance. This is because TileDB can take advantage of parallelism and perform better parallel tile filtering and IO. Moreover, larger (and more infrequent) writes generally lead to fewer fragments, thus affecting read performance.

Fragments

What affects read performance with respect to fragments is:

  • Number of fragments

  • Overlap of fragment non-empty domains.

The more fewer and more "spatially disjoint" the fragments are, the better TileDB can prune fragments during reads and achieve better performance. Make sure that each write operation focuses on a separate sub-domain.

Parallelism

Section Write Parallelism describes in detail how TileDB internally parallelizes writes. You should consider fine-tuning the parameters explained therein.