Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Marconi.Core.Indexer.MixedIndexer
Description
An indexer that uses an indexer for recent events (usually in-memory) and another one for older events (usually on-disk).
This indexer maintains a queue of flush points.
Once we received enough blocks (keepInMemory
+ flushEvery
events),
we dequeue the oldest flush point and send all the in memory events that
are older or equal to this flush point on disk.
The implementation considers that all the immutable events are sent to disk.
See Marconi.Core for documentation.
Synopsis
- class Flushable m event indexer where
- data MixedIndexer store mem event
- mkMixedIndexer :: Word -> Word -> store event -> mem event -> MixedIndexer store mem event
- standardMixedIndexer :: (IsSync m event store, HasGenesis (Point event), Ord (Point event), Monad m) => Word -> Word -> store event -> m (MixedIndexer store ListIndexer event)
- inMemory :: Lens' (MixedIndexer store mem event) (mem event)
- inDatabase :: Lens' (MixedIndexer store mem event) (store event)
- class HasMixedConfig indexer where
- flushEvery :: Lens' (indexer event) Word
- keepInMemory :: Lens' (indexer event) Word
- flushEveryVia :: HasMixedConfig indexer => Lens' s (indexer event) -> Lens' s Word
- keepInMemoryVia :: HasMixedConfig indexer => Lens' s (indexer event) -> Lens' s Word
Documentation
class Flushable m event indexer where #
Define a way to flush old events out of a container
Associated Types
type Container (indexer :: Type -> Type) :: Type -> Type #
The events container used when you flush event
Methods
memorySize :: indexer event -> m Word #
Arguments
:: Point event | Last point to flush |
-> indexer event | |
-> m (Container indexer (Timed (Point event) event), indexer event) |
Clear the memory and return its content
Instances
(Applicative m, Ord (Point event)) => Flushable m event ListIndexer # | |
Defined in Marconi.Core.Indexer.MixedIndexer Associated Types type Container ListIndexer :: Type -> Type # Methods memorySize :: ListIndexer event -> m Word # flushMemory :: Point event -> ListIndexer event -> m (Container ListIndexer (Timed (Point event) event), ListIndexer event) # |
data MixedIndexer store mem event #
An indexer that keepAtLeast _configKeepInMemory
events in memory
and put the older one on disk by group of _configFlushSize
events.
The query interface for this indexer will always go through the database first and then prune
results present in memory.
mem
the indexer that handles old events, when we need to remove stuff from memory
store
the indexer that handle the most recent events
Instances
(AppendResult m event query ListIndexer, Queryable m event query store) => Queryable m event query (MixedIndexer store ListIndexer) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods query :: Point event -> query -> MixedIndexer store ListIndexer event -> m (Result query) # queryLatest :: query -> MixedIndexer store ListIndexer event -> m (Result query) # | |
(Ord (Point event), Flushable m event mem, Traversable (Container mem), IsIndex m event store, IsIndex m event mem, IsSync m event mem) => IsIndex m event (MixedIndexer store mem) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods index :: Timed (Point event) (Maybe event) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) # indexAll :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) # indexAllDescending :: (Eq (Point event), Traversable f) => f (Timed (Point event) (Maybe event)) -> MixedIndexer store mem event -> m (MixedIndexer store mem event) # rollback :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) # setLastStablePoint :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) # | |
(IsSync event m mem, Monad event) => IsSync event m (MixedIndexer store mem) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods lastStablePoint :: MixedIndexer store mem m -> event (Point m) # lastSyncPoint :: MixedIndexer store mem m -> event (Point m) # | |
(Functor m, Prunable m event store) => Prunable m event (MixedIndexer store mem) # | |
Defined in Marconi.Core.Transformer.WithPruning Methods prune :: Point event -> MixedIndexer store mem event -> m (MixedIndexer store mem event) # pruningPoint :: MixedIndexer store mem event -> m (Maybe (Point event)) # | |
(Closeable m store, Closeable m mem, Monad m) => Closeable m (MixedIndexer store mem) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods close :: MixedIndexer store mem event -> m () # | |
HasMixedConfig (MixedIndexer store mem) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods flushEvery :: Lens' (MixedIndexer store mem event) Word # keepInMemory :: Lens' (MixedIndexer store mem event) Word # |
Arguments
:: Word | how many events are kept in memory after a flush |
-> Word | flush size |
-> store event | |
-> mem event | |
-> MixedIndexer store mem event |
A smart constructor for a MixedIndexer
that sets only the relevant parameters
Arguments
:: (IsSync m event store, HasGenesis (Point event), Ord (Point event), Monad m) | |
=> Word | how many events are kept in memory after a flush |
-> Word | flush size |
-> store event | |
-> m (MixedIndexer store ListIndexer event) |
Create a mixed indexer that initialised it's last stable point point from the inDatabase indexer
inMemory :: Lens' (MixedIndexer store mem event) (mem event) #
access to the in memory part of the indexer
inDatabase :: Lens' (MixedIndexer store mem event) (store event) #
access to the on disk part of the indexer
class HasMixedConfig indexer where #
Provide access to the mixed indexer configuration, an indexer transformer has to implement it if you want to access the configuration option of the mixed indexer below the transformer
Instances
(IndexerTrans t, HasMixedConfig indexer) => HasMixedConfig (t indexer) # | |
Defined in Marconi.Core.Indexer.MixedIndexer | |
HasMixedConfig (MixedIndexer store mem) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods flushEvery :: Lens' (MixedIndexer store mem event) Word # keepInMemory :: Lens' (MixedIndexer store mem event) Word # | |
(IndexerMapTrans t, HasMixedConfig indexer) => HasMixedConfig (t indexer output) # | |
Defined in Marconi.Core.Indexer.MixedIndexer Methods flushEvery :: Lens' (t indexer output event) Word # keepInMemory :: Lens' (t indexer output event) Word # |
flushEveryVia :: HasMixedConfig indexer => Lens' s (indexer event) -> Lens' s Word #
Ease the implementation of flushEvery
for an indexer transformer
keepInMemoryVia :: HasMixedConfig indexer => Lens' s (indexer event) -> Lens' s Word #
Ease the implementation of keepInMemory
for an indexer transformer