东风草堂博客

公众号:开发者来风

Table的管理

在Pegasus里,table相当于一个namespace,不同的table下可以有相同的(HashKey, SortKey)序对。在使用table前,需要在向MetaServer先发起建表的申请。

MetaServer在建表的时候,首先对表名以及选项做一些合法性的检查。如果检查通过,会把表的元信息持久化存储到Zookeeper上。在持久化完成后,MetaServer会为表中的每个分片都创建一条记录,叫做PartitionConfiguration。该记录里最主要的内容就是当前分片的version以及分片的composition(即Primary和Secondary分别位于哪个ReplicaServer)。

在表创建好后,一个分片的composition初始化为空。MetaServer会为空分片分配Primary和Secondary。等一个分片有一主两备后,就可以对外提供读写服务了。假如一张表所有的分片都满足一主两备份,那么这张表就是可以正常工作的。

如果用户不再需要使用一张表,可以调用删除接口对Pegasus的表进行删除。删除的信息也是先做持久化,然后再异步的将删除信息通知到各个ReplicaServer上。等所有相关ReplicaServer都得知表已经删除后,该表就变得不可访问。注意,此时数据并未作物理删除。真正的物理删除,要在一定的时间周期后发生。在此期间,假如用户想撤回删除操作,也是可以调用相关接口将表召回。这个功能称为软删除。

阅读全文 »

稳定性与兼容性

断言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifdef NDEBUG
#define assert(expr) (static_cast<void>(0))
#else
#endif

#ifndef _COMPLEX_H
#error "Nerver use <bits/cmathcalls.h> directly; include <complex.h> instead."
#endif

// 静态断言的实现
#define assert_static(e) \
do { \
enum { assert_static__ = 1/(e) }; \
} while (0)
// do while这样写可以避免if没有加括号而出现匹配异常的情况

异常

如果noexcept修饰的函数抛出了异常,编译器可用选择直接调用std::terminate()函数来终止程序的运行,如析构函数不应该抛出异常,所以默认是noexcept(true)。在c++98中,使用throw()来声明不抛出异常的函数。

阅读全文 »

精选推荐各类高效办公软件,涵盖文档处理、项目管理、团队协作、云存储等核心场景。分享免费且跨平台的优质工具,帮助提升工作效率,实现远程协作与移动办公的最佳实践。

阅读全文 »

配置

rewrite regex replacement [flag];
rewrite的含义:该指令是实现URL重写的指令。
regex的含义:用于匹配URI的正则表达式。
replacement:将regex正则匹配到的内容替换成 replacement。
flag: flag标记。

flag有如下值:

  • last: 本条规则匹配完成后,继续向下匹配新的location URI 规则。(不常用)
  • break: 本条规则匹配完成即终止,不再匹配后面的任何规则(不常用)。
  • redirect: 返回302临时重定向,浏览器地址会显示跳转新的URL地址。
  • permanent: 返回301永久重定向。浏览器地址会显示跳转新的URL地址。

比如rewrite ^/(.*) http://www.baidu.com/$1 permanent;
说明:

阅读全文 »

git

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 更新所有tags:
git fetch --tags
# 查看其中一个tag:
git show V100
# 使用TortoiseGit里面的show log查看各个commit的提交情况。
# 从索引中删除文件。
git rm --cached
git stash pop stash@{1}
git merge master --allow-unrelated-histories
# 运行以下命令来获取远程仓库的最新分支信息
git fetch --all
# 检查已经获取到的所有分支列表
git branch -r
# 针对每个远程分支,在本地创建并切换到对应的分支上:
git checkout -b <本地分支名> <远程分支名>
git tag -a v1.0 abcdef1 -m "Version 1.0 released"
git push origin <tag_name>
# commit信息
git config commit.template .gitmessage

要将一个分支(例如,名为 source_branch)中的提交更改复制到另一个分支(例如,名为 destination_branch),你可以使用 git cherry-pick 命令。这个命令会将指定的提交复制到当前分支。

TortoiseGit

阅读全文 »

算法和数据结构

解题思路:画图、推演、分解。代码编写:代码规范、功能正确、边界问题、异常处理、效率问题。

深度优先搜索

求可能解的问题,而广度优先搜索是求最优解的问题。
解题步骤:按照规则顺序搜索,尽量不重复不遗漏枚举出所有可能分支。使用递归来实现:使用栈、考虑好退出条件、自己调用自己,拆分出类似解。回溯:切换其他可能分支,注意恢复原状态。剪枝:优化搜索性能,去除重复解,发现找不到解可以提前退出。

例子:求一个字符串的所有排列组合,不含重复解,字符串长度小于8。
画递归树:先确定第一个字符,让后面的字符串bc作为一个整体,再让第一个字符a与后面的字符bc分别进行交换,里面的整体bc重复同样的操作。

阅读全文 »
0%