Occurrent 0.8.0 released
· All news
Occurrent 0.8.0 is now available. It contains several important changes, must notably it introduces a better way to sort queries, by making use if the new org.occurrent.eventstore.api.SortBy API.
Sorts can now be done on an arbitrary cloud event field, and they can also be composed:
var sortBy = SortBy.ascending(TIME, STREAM_VERSION);eventStoreQueries.all(sortBy);Remember that for queries and sorts to be efficient over large data sets, you need a proper index!
Changelog:
-
Only log with “warn” when subscription is restarted due to “ChangeStreamHistoryLost”.
-
InMemoryEventStorenow sorts queries by insertion order by default (before “time” was used) -
Added a new default compound index to MongoDB event stores,
{ streamid : 1, streamversion : 1}. The reason for this is to get the events back in order when reading a stream from the event store and to make this efficient. Previous$naturalorder was used but this would skip the index, making reads slower if you have lots of data. -
Removed the index,
{ streamid : 1, streamversion : -1 }, from all MongoDB EventStore’s. It’s no longer needed now that we have{ streamid : 1, streamversion : 1}. -
All MongoDB EventStore’s now loads the events for a stream by leveraging the new
{ streamid : 1, streamversion : 1}index. -
CatchupSubscriptionModelnow sorts by time and then by stream version to allow for a consistent read order (see MongoDB documentation). Note that the above is only true if you supply aTimeBasedSubscriptionPositionthat is not equal to “TimeBasedSubscriptionPosition.beginningOfTime()` (which is default if no filter is supplied). -
Major change in how you can sort the result from queries. Before you only had four options, “natural” (ascending/descending) and “time” (ascending/descending), now you can specify any support CloudEvent field. This means that e.g.
SortBy.TIME_ASChas been removed. It has been replaced with theSortByAPI (org.occurrent.eventstore.api.SortBy), that allows you to do e.g.SortBy.time(ASCENDING)Sorting can now be composed, e.g.
SortBy.time(ASCENDING).natural(DESCENDING)This has been implemented for all event stores.
-
It’s now possible to change how
CatchupSubscriptionModelsorts events read from the event store during catch-up phase. For example:var subscriptionModel = ...var eventStore = ..var cfg = new CatchupSubscriptionModelConfig(100).catchupPhaseSortBy(SortBy.descending(TIME));var catchupSubscriptionModel = CatchupSubscriptionModel(subscriptionModel, eventStore, cfg);By default, events are sorted by time and then stream version (if two or more events have the same time).
