Git Product home page Git Product logo

neventstore.persistence.ravendb's Introduction

NEventStore

NEventStore is a persistence library used to abstract different storage implementations when using event sourcing as storage mechanism.

This library is developed with a specific focus on DDD/CQRS applications.

NEventStore currently supports:

  • .net standard 2.0
  • .net framework 4.6.2

Starting from Version 6.0.0 NEventStore will use Semantic Versioning to track the version numbers.

Build Status (AppVeyor)

Branches:

  • master Build status
  • develop Build status

Main Library Packages

  • NEventStore - the core library package.
  • NEventStore.Serialization.Json - Json serialization to be used with an IDocumentSerializer.
  • NEventStore.Serialization.Bson - BSon serialization to be used with an IDocumentSerializer.
  • NEventStore.PollingClient - provides an implementation for a PollingClient.

Documentation

Please see the documentation to get started and for more information.

ChangeLog can be found here

Developed with:

Resharper TeamCity dotCover dotTrace

How to build (Windows OS)

To build the project locally on a Windows Machine:

  • Open a Powershell console in Administrative mode and run the build script build.ps1 in the root of the repository.

Vesioning

Versioning is done automatically by the build script updating the AssemblyInfo.cs file (false in .csproj files) before the build starts. The version number is retrieved from the git repository tags using "gitversion" tool.

Things are handled this way because NEventStore is used a submodule in other projects and it need to have it's own version number when building other projects.

You should not update the version number manually, not commit the updated AssemblyInfo files.

neventstore.persistence.ravendb's People

Contributors

alkampfergit avatar andreabalducci avatar damianh avatar iridio avatar kblooie avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

neventstore.persistence.ravendb's Issues

Engine to be re-implemented

I am curious why RavenPersistenenceEngine.Commit throws this exception.
Is there some work needed to be done still?
It took a few hours to find this, since I was investigating why message dispatcher was not being called. I see the events arrive in ravendb but none of the post commit hooks are executed.

Fully Consistent Stream Retrieval

The the raven implementation leverages queries when retrieving streams. Raven queries by design are eventually consistent. To get around this, WaitForNonStaleResultsAsOfLastWrite is leveraged to try to force consistency. This causes issues with timeouts when there are many indexes on the same database or when indexing is slow.

With Raven feature improvements, we should now be able to refactor the models to provide an implementation that doesn't rely on Queries for gets for a single stream & perhaps for replay by checkpointId.

I expect that getting by date will still require queries.

CheckpointNumberIncrementListener doesn't get applied if you aren't using the factory

CheckpointNumberIncrementListener is used to set the next checkpointId. This is listener is required by the RavenPersistenceEngine. However, it doesn't get added to the documentStore if the user instantiates the RavenPersistenceEngine directly, providing their own IDocumentStore.

We should move adding the listener as initinalization logic to inside RavenPersistenceEngine. However, RavenPersistenceEngine depends on IDocumentStore, which doesn't expose RegisterListener. We should consider changing the dependency to DocumentStoreBase.

This will be a breaking change to the RavenPersistenceEngine ctor contract.

Issues with RavenDB persistence

(Moved from NEventStore/NEventStore#110 , go there to see the rest of the thread)

Hi Jonathan,

We have uncovered recently a few issues when persisting events into RavenDB which are all related to how indexes work there. It would be nice to hear what you think about these:

By default RavenPersistenceEngine is constructed with ConsistentQueries option set to "false" which opens a time window when it is possible to create & save an aggregate, but then fail to load it back upon receiving next message delivering new update. That is because Raven was under pressure and couldn't update "RavenCommitsBy.." index fast enough.
If we enable ConsistentQueries then under heavy pressure we get Raven's timeout exceptions (Waited for 16,493ms for the query to return non stale result). It passes fine on second retry, since index is updated.
EventStore defines several "RavenCommitsBy... and "RavenSnapshot..." indexes per database, but they are all global (non AR or Saga specific) and if you have several aggregates/sagas who save into this EventStore -> staleness of these indexes is defined by new events coming to ANY of those, instead of being AR or Sage bound. Do you also see benefit of maintaining index per AR/Saga type?
Thanks,
Anton.

NuGet Release v6.0

Hey, is it possible to add the latest release (6.0) dependent on Raven 3.0 to the NuGet library?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.