Use Case: Partitioning both Storages for Backup and Reuse/Recrawling
- Changes in XML and Bin storage.
- To support partitioning both XML- and Bin- storages must be able to store data to partitions. Thus XML- and Bin- storage APIs should be extended in such way that partition information will be accepted as an additional parameter when saving data. With binstorage, binary attachments can have quite a big size, thus if attachment wasn't changed from one partition to another, it's worth not to copy attachment's data for each partition but store only reference to actual attachment.
- Partitioning configuration and changes in Blackboard API.
- Partition information (partition name) can be configured into Listener Rule.
- There are following ways of how to pass partition information:
- Partition information is passed as a record Id property.
- Listener gets record from the queue and sets partition information to the record's Id property.
- Blackboard uses partition information in load and commit operations.
- In this case no significant changes are required to the blackboard API because partition information is encapsulated into record Id.
- Partition information is passed separately from record as a JMS property.
- Listener reads JMS property from the queue and makes it available for other components that will use blackboard (like processing).
- In this case there are two possibilities:
- - record is loaded (and committed) to storages using partition information. After that record can be accessed by Id from the internal blackboard cache, until commit is invoked. Implementing this way will require first to solve problems when some process wants to access already committed record.
- - all methods from blackboard API should be duplicated to handle partition name as a second parameter. In this case if record is missing into internal blackboard cache, it can be first loaded from storages using provided partition information.
- The variant 1 seems to be more useful and easy to implement because it allows to keep partition information directly into the record, thus easily pass and receive it between distributed components and also requires almost no blackboard API modifications.