Summary: Supported and non-supported operations, limitations, and considerations when working with a clustered space.

Cluster-Aware Operations

In general, the partitioned space provides the ability to perform space operations against different spaces transparently. The primary goal of the partitioned space is to provide unlimited In-Memory space storage size and group objects into the same space to speed up the performance of batch operations. The initial intention is to write data into the partitioned space, and direct the read or take operation, based on the template data.

With in such configuration, the different spaces defined as partitions are not aware of each other (Share Nothing). The client proxy is one that is aware of the partitioned spaces configuration. The client proxy routes each operation to the relevant partition when it is executed on the client side.

When performing space operations (write, read, or take) and using the default hash-based load-balancing policy, GigaSpaces directs the operation based on Routing field value hash code. When using the writeMultiple and updateMultiple space operations, the proxy running at the client side groups space objects that are targeted into the same space, and then write/update these in batches into the relevant space.

When using a template that has a null value as part of the Routing Field with takeMultiple, or readMultiple) with a partitioned space, a parallel query is executed against all partitions, and the result set accumulated from all partitions by the proxy. The result set might be large, since the matching population target can span all space objects across all partitions. In such a case you might consider using the GSIterator.

The table below shows whether the operation is routed to all partitions (cluster-aware), or can work only with a specific partition and isn't routed to the other members.

Operation Cluster-aware
take – blocking take isn't supported, see below
takeIfExist
read – blocking read isn't supported, see below
readIfExist
readMultiple
takeMultiple
readById
takeById
readByIds
takeByIds
clear
notify
count
clean
snapshot

Considerations

  • When initializing a partitioned space, it is possible to load only the data you need for a specific partition. For more details, see External Data Source Initial Load.

Limitations

  • Blocking read or take operations (timeout > 0) with broadcast_if_null_values or unconditional broadcast mode is not supported – attempting to execute a blocking read or take operation throws a RuntimeException with the error: NULL value in indexed field > 'indexField' is not permitted. You should use the Non-Blocking Receive Handler to handle such situation.
  • Performing operations in FIFO mode across all partitions is not supported. In case of notifications, you can overcome this by performing custom client-side FIFO-based notifications.
  • When using a partitioned space and performing destructive operations (write, take, remove), distributed transaction manager should be used to coordinate the commit between all partitions (local transactions cannot be used in this case).
GigaSpaces.com - Legal Notice - 3rd Party Licenses - Site Map - API Docs - Forum - Downloads - Blog - White Papers - Contact Tech Writing - Gen. by Atlassian Confluence