mirror of
https://github.com/Vonng/ddia.git
synced 2025-09-26 23:09:18 +08:00
Compare commits
4 Commits
33d81dd3ae
...
5fa5a7553c
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5fa5a7553c | ||
![]() |
685825b316 | ||
![]() |
31d1378772 | ||
![]() |
bca5ee5552 |
41
.github/workflows/ebooks.yaml
vendored
Normal file
41
.github/workflows/ebooks.yaml
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
name: Generate GitBook eBooks
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-ebook:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Pandoc
|
||||||
|
uses: siacodelabs/setup-pandoc@v1
|
||||||
|
with:
|
||||||
|
xelatex: true
|
||||||
|
|
||||||
|
- name: Generate EPUB file
|
||||||
|
run: make epub
|
||||||
|
|
||||||
|
- name: Create or update Release and upload EPUB
|
||||||
|
if: github.event_name == 'push'
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
tag: latest
|
||||||
|
name: DDIA EBook - Latest Release
|
||||||
|
artifacts: output/ddia.epub
|
||||||
|
allowUpdates: true
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Upload generated eBooks
|
||||||
|
if: github.event_name == 'workflow_dispatch'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ebooks
|
||||||
|
path: output/ddia.epub
|
2
bin/epub
2
bin/epub
@ -20,7 +20,7 @@ convert_to_epub() {
|
|||||||
pandoc -o "$OUTPUT_BOOK" --metadata-file="$meta_file" \
|
pandoc -o "$OUTPUT_BOOK" --metadata-file="$meta_file" \
|
||||||
--toc-depth=2 \
|
--toc-depth=2 \
|
||||||
--top-level-division=chapter \
|
--top-level-division=chapter \
|
||||||
--file-scope=true \
|
--file-scope \
|
||||||
--css="$css_file" \
|
--css="$css_file" \
|
||||||
--webtex \
|
--webtex \
|
||||||
--wrap=preserve \
|
--wrap=preserve \
|
||||||
|
@ -163,7 +163,7 @@ SELECT COUNT(*) FROM emails WHERE recipient_id = 2 AND unread_flag = true
|
|||||||
当单个对象被更改时,原子性和隔离性也适用。例如,假设你正在向数据库写入 20 KB 的 JSON 文档:
|
当单个对象被更改时,原子性和隔离性也适用。例如,假设你正在向数据库写入 20 KB 的 JSON 文档:
|
||||||
|
|
||||||
* 如果在发送了前 10 KB 后网络连接中断,数据库是否存储了无法解析的 10 KB JSON 片段?
|
* 如果在发送了前 10 KB 后网络连接中断,数据库是否存储了无法解析的 10 KB JSON 片段?
|
||||||
* 如果数据库正在覆盖磁盘上的先前值的过程中电源失败,你是否最终会将新旧值拼接在一起?
|
* 如果数据库正在覆盖磁盘上的先前值的过程中电源失效,你是否最终会将新旧值拼接在一起?
|
||||||
* 如果另一个客户端在写入过程中读取该文档,它会看到部分更新的值吗?
|
* 如果另一个客户端在写入过程中读取该文档,它会看到部分更新的值吗?
|
||||||
|
|
||||||
这些问题会令人非常困惑,因此存储引擎几乎普遍的目标是在一个节点上的单个对象(如键值对)上提供原子性和隔离性。原子性可以使用日志实现崩溃恢复(参见["使 B 树可靠"](/ch4#sec_storage_btree_wal)),隔离性可以使用每个对象上的锁来实现(一次只允许一个线程访问对象)。
|
这些问题会令人非常困惑,因此存储引擎几乎普遍的目标是在一个节点上的单个对象(如键值对)上提供原子性和隔离性。原子性可以使用日志实现崩溃恢复(参见["使 B 树可靠"](/ch4#sec_storage_btree_wal)),隔离性可以使用每个对象上的锁来实现(一次只允许一个线程访问对象)。
|
||||||
|
Loading…
Reference in New Issue
Block a user