Closed nvivo closed 8 years ago
Having only sundays to work on this, so it's taking longer than expected. Hopefully next week I'll have the first nuget package.
From the title it looks promising! Exactly what I've been looking for. I'll have a more detailed look today... anyhow, keep up the great work!
ps: perhaps you can think on added some todos to the issue list. That way I could contribute if you'd like.
@promontis that would me amazing. I have been quite busy with a company project that is consuming my time entirely, and have not been able to concentrate on finishing this. I'm eager to get back on this as soon as I can.
At this point, things seem to work with the in memory store. I just want to finish at least one of the sql backends so we have something to publish that can be persisted. My initial idea was to have something like NEventStore.Persistence.Sql where a single implementation could be shared across many sql databases just by changing the dialect. My initial implementation was based on my experience with mysql where building raw sql strings gets to amazing insert speeds. But it turns out abstracting this way is terrible for other databases like sql server.
Right now, I'd like to have a simpler implementation of the BaseSqlStore that doesn't rely on building complex sql strings. Possibly using independent inserts or prepared statements with parameters just to make it easier to extend to other databases.
Once that's done, I can publish a nuget package and focus more on documentation and getting it stable.
If you wanna try changing or reimplementing the sql store, would help a lot. I can help with the details if needed.
@nvivo Reading the source code bit by bit now. Could you tell us something on the difference between Akka.Persistence and this project, and why you made them?
@promontis. I think we have different views and goals. Akka Persistence defines event sourcing as actors replaying events to rebuild state before processing commands. But it seems to me this is a very limited view of the paradigm.
First, in Akka Persistence there is no good story for querying events in a generic way. It handles each stream independently in each actor and provides no simple way to query different streams and merge the results for example (like EventStore projections). There is a very long discussion here to solve some of these issues, but even if that's implemented on JVM (it wasn't when I started writing this code) and ported to .NET, it's still a limited API to do what I wanted to do.
To me, it looks like akka persistence works very well in examples or if you're using only to persist actor state (which is it original goal), but if you really want to benefit from event sourcing, it's a very small piece of the puzzle. Since what Akka Persistence does is relatively simple compared to some other goals like querying and projections, I decided to skip it completely and just build from scratch.
A few major goals that are not part of persistence are:
There is more, I plan to have some more docs with goals and roadmaps once I have the time.
But in the end, I guess I wanted to have a more opinionated framework you can really build an application on top of it using event sourcing, instead of it being a low level tool.
I'd also like to contribute as I have a need to build a CQRS/EventSourcing framework on top of Akka. A todo list would be great. One immediate item that would help is to setup a build process that produces nuget packages, even if you aren't ready for those packages to be publicly available, but I see no harm in 0.0.1.0 packages which are early work. I'll add an issue for that and use that to discuss the build framework (i.e. FAKE, Cake, or whatever).
@DamianReeves I'll see if I can write down some of the things I have in mind this weekend. Also, if you have ideas or needs, please open issues and we can discuss how to implement that.
I just published an initial package to nuget as it is, only with InMemoryStore support to get things going.
https://www.nuget.org/packages/Even/
Any further discussions should go to new issues.
Great, let's play with the first alpha!
Great news, this should start moving things forward
Things to do before releasing the first alpha:
Query
mechanism