| Safe Haskell | Safe-Inferred |
|---|---|
| Language | GHC2021 |
Database.LSMTree.Internal.RawOverflowPage
Synopsis
- data RawOverflowPage = RawOverflowPage !Int !ByteArray
- makeRawOverflowPage :: ByteArray -> Int -> Int -> RawOverflowPage
- unsafeMakeRawOverflowPage :: ByteArray -> Int -> RawOverflowPage
- rawOverflowPageRawBytes :: RawOverflowPage -> RawBytes
- rawOverflowPageToByteString :: RawOverflowPage -> ByteString
- rawBytesToOverflowPages :: RawBytes -> [RawOverflowPage]
- pinnedByteArrayToOverflowPages :: Int -> Int -> ByteArray -> [RawOverflowPage]
- unpinnedByteArrayToOverflowPages :: Int -> Int -> ByteArray -> [RawOverflowPage]
Documentation
data RawOverflowPage Source #
When a key/op pair is too large to fit in a single disk page, the
representation is split into a normal page, and one or more overflow pages.
The normal RawPage follows the run page format, and contains the key,
optional blob reference and a prefix of the value, while the overflow pages
contain the suffix of a large value that didn't fit in the normal page.
Each overflow page is the same size as normal pages (currently 4096 only).
Constructors
| RawOverflowPage | |
Instances
| Show RawOverflowPage Source # | |
Defined in Database.LSMTree.Internal.RawOverflowPage Methods showsPrec :: Int -> RawOverflowPage -> ShowS # show :: RawOverflowPage -> String # showList :: [RawOverflowPage] -> ShowS # | |
| NFData RawOverflowPage Source # | |
Defined in Database.LSMTree.Internal.RawOverflowPage Methods rnf :: RawOverflowPage -> () # | |
| Eq RawOverflowPage Source # | This instance assumes pages are 4096 bytes in size |
Defined in Database.LSMTree.Internal.RawOverflowPage Methods (==) :: RawOverflowPage -> RawOverflowPage -> Bool # (/=) :: RawOverflowPage -> RawOverflowPage -> Bool # | |
Arguments
| :: ByteArray | bytearray |
| -> Int | offset in bytes into the bytearray |
| -> Int | length in bytes, must be |
| -> RawOverflowPage |
Create a RawOverflowPage.
The length must be 4096 or less.
This function will copy data if the byte array is not pinned, or the length is strictly less than 4096.
unsafeMakeRawOverflowPage Source #
Arguments
| :: ByteArray | bytearray, must be pinned and contain 4096 bytes (after offset) |
| -> Int | offset in bytes |
| -> RawOverflowPage |
Create a RawOverflowPage without copying. The byte array and offset must
satisfy the invariant for RawOverflowPage.
rawOverflowPageToByteString :: RawOverflowPage -> ByteString Source #
\( O(1) \) since we can avoid copying the pinned byte array.
rawBytesToOverflowPages :: RawBytes -> [RawOverflowPage] Source #
Convert RawBytes representing the "overflow" part of a value into one
or more RawOverflowPages.
This will avoid copying where possible.
pinnedByteArrayToOverflowPages :: Int -> Int -> ByteArray -> [RawOverflowPage] Source #
unpinnedByteArrayToOverflowPages :: Int -> Int -> ByteArray -> [RawOverflowPage] Source #
Not pinned, in principle shouldn't happen much because if the value is big enough to overflow then it's big enough to be pinned. It is possible however if a page has a huge key and a small value.
Unfortunately, with GHC versions 9.6.x we also get this because the meaning of pinned has changed. Sigh. See https://gitlab.haskell.org/ghc/ghc/-/issues/22255