This commit is contained in:
Dmitry Zuikov 2024-03-23 13:35:48 +03:00
parent a892f4ab36
commit 37618a32bb
7 changed files with 136 additions and 2 deletions

View File

@ -19,6 +19,22 @@
\item Требуется включение/исключение авторов. \item Требуется включение/исключение авторов.
\end{enumerate} \end{enumerate}
\section{Стейт}
Исходя из требований, введём стейт как рефчан блоков транзакций, где каждая транзакция содержит
ссылку на блок, а каждый блок является \term{sstable}{sstable}, т.е индексированным, однократно
записываемым отсортированным множеством пар \texttt{(ключ, значение)}.
Такой формат гарантирует нам, что одинаковая кодовая база (в плане настроек LSM и соглашений) будет
порождать идентичные блоки.
В тоже время --- каждая отдельная <<транзакция>>, то есть <<факт>> -- не будет порождать отдельного
адресуемого объекта, таким образом, будут снижены все связанные с этим накладные расходы.
При этом мы можем относительно быстро находить блок и проверять его наличие в прочих сегментах.
% \section{Структуры данных и протоколы} % \section{Структуры данных и протоколы}

View File

@ -133,6 +133,21 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_7": {
"locked": {
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"haskell-flake-utils": { "haskell-flake-utils": {
"inputs": { "inputs": {
"flake-utils": "flake-utils" "flake-utils": "flake-utils"
@ -229,6 +244,24 @@
"inputs": { "inputs": {
"flake-utils": "flake-utils_6" "flake-utils": "flake-utils_6"
}, },
"locked": {
"lastModified": 1698938553,
"narHash": "sha256-oXpTKXioqFbl2mhhvpJIAvgNd+wYyv4ekI+YnJHEJ6s=",
"owner": "ivanovs-4",
"repo": "haskell-flake-utils",
"rev": "19b273b5dc401a0a565e7f75cf50a593871b80c9",
"type": "github"
},
"original": {
"owner": "ivanovs-4",
"repo": "haskell-flake-utils",
"type": "github"
}
},
"haskell-flake-utils_7": {
"inputs": {
"flake-utils": "flake-utils_7"
},
"locked": { "locked": {
"lastModified": 1672412555, "lastModified": 1672412555,
"narHash": "sha256-Kaa8F7nQFR3KuS6Y9WRUxeJeZlp6CCubyrRfmiEsW4k=", "narHash": "sha256-Kaa8F7nQFR3KuS6Y9WRUxeJeZlp6CCubyrRfmiEsW4k=",
@ -264,6 +297,27 @@
"type": "github" "type": "github"
} }
}, },
"lsm": {
"inputs": {
"haskell-flake-utils": "haskell-flake-utils_6",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1711033804,
"narHash": "sha256-z9cb5yuWfuZmGukxsZebXhc6KUZoPVT60oXxQ6j6ML8=",
"ref": "refs/heads/master",
"rev": "0e8286a43da5b9e54c4f3ecdb994173fe77351db",
"revCount": 26,
"type": "git",
"url": "https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls"
},
"original": {
"type": "git",
"url": "https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1707451808, "lastModified": 1707451808,
@ -286,6 +340,7 @@
"fixme": "fixme", "fixme": "fixme",
"haskell-flake-utils": "haskell-flake-utils_4", "haskell-flake-utils": "haskell-flake-utils_4",
"hspup": "hspup", "hspup": "hspup",
"lsm": "lsm",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"saltine": "saltine", "saltine": "saltine",
"suckless-conf": "suckless-conf_2" "suckless-conf": "suckless-conf_2"
@ -332,7 +387,7 @@
}, },
"suckless-conf_2": { "suckless-conf_2": {
"inputs": { "inputs": {
"haskell-flake-utils": "haskell-flake-utils_6", "haskell-flake-utils": "haskell-flake-utils_7",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]

View File

@ -18,6 +18,9 @@ inputs = {
db-pipe.url = "git+https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"; db-pipe.url = "git+https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft";
db-pipe.inputs.nixpkgs.follows = "nixpkgs"; db-pipe.inputs.nixpkgs.follows = "nixpkgs";
lsm.url = "git+https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls";
lsm.inputs.nixpkgs.follows = "nixpkgs";
saltine = { saltine = {
url = "github:tel/saltine/3d3a54cf46f78b71b4b55653482fb6f4cee6b77d"; url = "github:tel/saltine/3d3a54cf46f78b71b4b55653482fb6f4cee6b77d";
flake = false; flake = false;

View File

@ -1,5 +1,7 @@
module Main where module Main where
import HBS2.Git.Oracle.Prelude
main :: IO () main :: IO ()
main = do main = do
print "hbs2-git-oracle" print "hbs2-git-oracle"

View File

@ -0,0 +1,31 @@
module HBS2.Git.Oracle.App where
import HBS2.Git.Oracle.Prelude
import Control.Monad.Reader
data OracleEnv =
OracleEnv
{
}
deriving stock (Generic)
newtype Oracle m a =
Oracle { fromOracle :: ReaderT OracleEnv m a }
deriving newtype ( Applicative
, Functor
, Monad
, MonadTrans
, MonadReader OracleEnv
, MonadIO
, MonadUnliftIO
)
newOracleEnv :: MonadIO m => m OracleEnv
newOracleEnv = pure OracleEnv
withOracleEnv :: MonadIO m => OracleEnv -> Oracle m a -> m a
withOracleEnv env m = runReaderT (fromOracle m) env

View File

@ -0,0 +1,12 @@
module HBS2.Git.Oracle.Prelude
( module HBS2.Prelude.Plated
, module Control.Monad.Reader.Class
, module UnliftIO
) where
import HBS2.Prelude.Plated
import Control.Monad.Reader.Class
import UnliftIO

View File

@ -168,13 +168,28 @@ executable git-remote-hbs2
default-language: GHC2021 default-language: GHC2021
library hbs2-git-oracle-oracle-lib
import: shared-properties
exposed-modules:
HBS2.Git.Oracle.Prelude
HBS2.Git.Oracle.App
build-depends: base
, base16-bytestring
, binary
, unix
hs-source-dirs: hbs2-git-oracle/lib
executable hbs2-git-oracle executable hbs2-git-oracle
import: shared-properties import: shared-properties
main-is: Main.hs main-is: Main.hs
-- other-modules: -- other-modules:
-- other-extensions: -- other-extensions:
build-depends: build-depends:
base, hbs2-git base, hbs2-git, hbs2-git-oracle-oracle-lib
, binary , binary
, vector , vector
, optparse-applicative , optparse-applicative