Releases: ledjon-behluli/OrleanSpaces
v1.0.1
What's Changed
- Update README.md by @ledjon-behluli in #20
- Add new sample - CacheReplication by @ledjon-behluli in #21
- Fixes an issue with StoreId not being set when received via the stream by @ledjon-behluli in #22
Full Changelog: v1.0.0...v1.0.1
v1.0.0
What's Changed
- Method and signature changes to the agent interface.
- Sepparation of
SpaceOptions
intoSpaceServerOptions
andSpaceClientOptions
. - Direct array passing to constructors of
SpaceTuple
andSpaceTemplate
. - Space partitioning.
- Configurable agent startup behavior.
OSA004
analyzer and code fixer.- Bug fixes
Full Changelog: 28-08-2023...v1.0.0
28-08-2023
NuGet v0.3.2
This release fixes issue #3 (reported by @ledjon-behluli) via PR #4
22-07-2023
NuGet v0.3.1
This release fixes issue #1 (reported by @jaredthirsk) via PR #2
19-07-2023
OrleanSpaces.Analyzers
NuGet v0.2.0
Features
- OSA001 - Interface is intended for internal use only.
- OSA002 - Avoid constructor instantiation having only
null
type, or no arguments. - OSA003 - One or more of the supplied argument types for
SpaceTuple
orSpaceTemplate
is not supported.
OrleanSpaces
NuGet v0.3.0
This release a MAJOR release with many braking changes, but necessary to improve the quality, versatility and performance of this library.
Features
- Specialized Tuples - In addition to the
SpaceTuple
&SpaceTemplate
which are the generic type tuples that can be used when you want to store different kind of field types together. Now we have introduced specialized (thereby strongly-typed) tuples, templates and agents. The library comes with a plethora of tuples and corresponding templates for the most used .NET types:bool
,byte
,char
,DateTime
,DateTimeOffset
,decimal
,double
,float
,Guid
,Int128
,int
,long
,sbyte
,short
,TimeSpan
,UInt128
,uint
,ulong
,ushort
. - Strongly-typed Agents - Due to the introduction of the specialized tuples.
- Improved Matching Process - Tuple search is performed via matching of templates to corresponding tuples in the space. This process has been highly parallelized for specialized tuples by leveraging hardware acceleration, specifically vectorization techniques.
- Space Replication - For every tuple space type and related changes to it, replication of its state is being performed constantly to all of the agent(s) that are responsible to interact with the corresponding tuple space type.
- Tuple Locality - Due to space replication, each of the agents has access to a copy of the tuple space in-memory, therefor search like operations are much faster, and also due to the much improved matching process of specialized tuples, searching through the space is blazingly fast.
- Host Agent Access - Previously the host of the tuple space did not have access to the space agent, therefor could not perform operations on the space. It was always the client that was performing these actions. Now both the host/server & client can perform actions on the tuple space(s).
- Tuple Streaming - Via the agent(s), any tuple writes in the space can be streamed directly to the client code via a new API that exposes an
IAsyncEnumerable<T>
whereT
is anyISpaceTuple
. With this, we now implement all major communication models:- Synchronous Request-Reply model.
- Asynchronous Request-Reply model.
- Streaming model.
- Publish-Subscribe model.
- Performance Improvements - Due to the introduction of the specialized model, space replication, a plethora of improvements has come, both in the form of faster code execution and significantly lower amount of heap allocations.
- Upgrade to .NET 7 - The project now targets
.NET 7
and alsoOrleans 7
. - Documentation - Update all documentation to reflect the changes.
Breaking Changes
- A LOT 🙇
12-02-2022
OrleanSpaces.Analyzers
NuGet v0.1.1
Features
- OSA001 - Avoid instantiation of empty
SpaceTuple
by default constructor or expression. - OSA002 - Avoid constructor instantiation of
SpaceTemplate
having onlySpaceUnit
type arguments. - OSA003 - The supplied argument type is not supported.
OrleanSpaces
NuGet v0.2.0
Features
- Avoiding generation of async state machines via async eliding on some of the methods of
ISpaceAgent
.
Breaking Changes
SpaceUnit.Null
has been removed.
The idea of this property was to serve a static value of type SpaceUnit
via a read-only reference, as opposed to new
'ing the same value every time. The problem was that in actuality it is more performant to simply new
a value as opposed to serving a reference to a pre-initialized value. The reason is that the size of the struct is 1, and when we return via ref
, it's returning a reference to the static value (so an IntPtr) which is of size 4 (x86 processor architecture), and size 8 (x64 processor architecture). So its makes much more sense to simply new()
it.
This benchmark instantiates SpaceUnit
s via constructor and reference:
Method | iterations | Mean | Error | StdDev | Allocated |
---|---|---|---|---|---|
ByCtor | 10 | 2.703 ns | 2.970 ns | 0.1628 ns | - |
ByRef | 10 | 4.001 ns | 3.050 ns | 0.1672 ns | - |
ByCtor | 100 | 30.762 ns | 9.106 ns | 0.4991 ns | - |
ByRef | 100 | 31.984 ns | 1.688 ns | 0.0925 ns | - |
ByCtor | 1000 | 240.258 ns | 6.619 ns | 0.3628 ns | - |
ByRef | 1000 | 241.926 ns | 5.238 ns | 0.2871 ns | - |
ByCtor | 10000 | 2,336.375 ns | 63.654 ns | 3.4891 ns | - |
ByRef | 10000 | 2,338.577 ns | 159.218 ns | 8.7273 ns | - |
ByCtor | 100000 | 23,197.835 ns | 2,682.852 ns | 147.0562 ns | - |
ByRef | 100000 | 23,286.836 ns | 1,961.542 ns | 107.5187 ns | - |
This benchmark instantiates SpaceUnit
s via constructor and reference, but also inserts them into an array of SpaceUnit
s:
Method | iterations | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|---|
ByCtor | 10 | 8.286 ns | 6.513 ns | 0.3570 ns | 0.0096 | - | - | 40 B |
ByRef | 10 | 14.880 ns | 3.227 ns | 0.1769 ns | 0.0095 | - | - | 40 B |
ByCtor | 100 | 63.681 ns | 3.227 ns | 0.1769 ns | 0.0305 | - | - | 128 B |
ByRef | 100 | 138.383 ns | 21.043 ns | 1.1534 ns | 0.0305 | - | - | 128 B |
ByCtor | 1000 | 521.173 ns | 82.105 ns | 4.5004 ns | 0.2441 | - | - | 1024 B |
ByRef | 1000 | 1,452.452 ns | 101.014 ns | 5.5369 ns | 0.2441 | - | - | 1024 B |
ByCtor | 10000 | 5,019.518 ns | 154.834 ns | 8.4870 ns | 2.3880 | - | - | 10024 B |
ByRef | 10000 | 15,180.695 ns | 663.576 ns | 36.3728 ns | 2.3804 | - | - | 10024 B |
ByCtor | 100000 | 163,885.567 ns | 6,346.882 ns | 347.8940 ns | 31.1279 | 31.1279 | 31.1279 | 100035 B |
ByRef | 100000 | 176,574.064 ns | 7,297.200 ns | 399.9841 ns | 31.0059 | 31.0059 | 31.0059 | 100035 B |