1、这款数据库的发展历史
2、是不是适合我们当前的场景
3、是不是符合长期发展需求(数据量维度, 数据模型维度, 数据类型, 计算, 检索维度)
4、公司内部有没有会用这款产品的, 有多深
5、公司内部有没有有没有熟悉这个产品的数据库架构师
6、有没有会管理、优化的
7、有没有开发依赖的生态产品, 是否符合公司技术栈, 使用这个产品的时间成本。
8、有没有外部商业化售后服务
9、是否符合行业合规要求
10、有哪些用户在用这个产品
11、数据库源代码生命力 (开源社区的运作逻辑, 是否可以长久运作, 核心组组成,为什么贡献,提交代码的流程,代码质量,全球有多少内核开发者, 有多少国家在贡献, 代码掌握在谁手里, 开源许可, 有没有那个国家控制, 有没有那个公司控制)
12、这款数据库处于什么发展周期(上升, 下降?)
13、这款数据库未来的发展方向
14、以上数据如何量化,对比其他数据库, 有没有更合适的其他数据库产品
15、这款数据库的人才库分布如何?
1)应用开发(SQL)人才
2)应用框架开发人才
3)管理人才
4)数据库架构师人才
5)数据库底座内核开发
6)数据库应用内核开发
7)数据库服务提供商
私有部署类向日葵的RustDesk
RustDesk端口说明:
hbbs – RustDesk ID注册服务器
hbbr – RustDesk 中继服务器
- hbbs 监听21115(tcp) —-是hbbs用作NAT类型测试
- 21116(tcp/udp) —-是hbbs用作ID注册与心跳服务
- 21118(tcp) —-是hbbs用作TCP打洞与连接服务
- hbbr 监听21117(tcp) —-是hbbr用作中继服务
- 21119(tcp) 、21119(tcp) —-21118和21119是为支持网页客户端,暂时可以关闭。
Docker私有部署部署方式一:
sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -vpwd
:/root -td --net=host rustdesk/rustdesk-server hbbs -r
sudo docker run --name hbbr -p 21117:21117 -p
21118:21118 21119:21119 -vpwd
:/root -td --net=host rustdesk/rustdesk-server hbbr
Docker私有部署方式二:Docker-compose
version: '3'
networks:
rustdesk-net:
external: false
services:
hbbs:
container_name: hbbs
ports:
- 21115:21115
- :21116 # 自定义 hbbs 映射端口
- :21116/udp # 自定义 hbbs 映射端口
image: rustdesk/rustdesk-server
command: hbbs -r : # 填入个人域名或 IP + hbbr 暴露端口
volumes:
- :/root # 自定义挂载目录
networks:
- rustdesk-net
depends_on:
- hbbr
restart: unless-stopped
deploy:
resources:
limits:
memory: 64M
hbbr:
container_name: hbbr
ports:
- :21117 # 自定义 hbbr 映射端口
image: rustdesk/rustdesk-server
command: hbbr
volumes:
- :/root # 自定义挂载目录
networks:
- rustdesk-net
restart: unless-stopped
deploy:
resources:
limits:
memory: 64M
Tinc简介
一. Tinc简介
Tinc VPN 是一个虚拟专用网络(VPN)守护进程,它使用隧道和加密技术在互联网上的主机之间创建一个安全的私有网络。Tinc VPN 在网络层工作,因此无需对现有软件进行修改和配置。它的数据通讯经过加密和压缩,能避免敏感数据和隐私的泄露。
二. Tinc的特点:
- 跨平台与IPv6 支持
- 加密,认证和压缩:所有流量都可以选择使用 zlib 或 LZO 进行压缩,使用 LibreSSL 或 OpenSSL 对流量进行加密,并使用消息认证码和序列号保护流量不被篡改。
- 自动全网状路由:无论如何设置 tinc 守护进程相互连接,VPN 流量总是(如果可能)直接发送到目标,而不经过中间跳转。
- NAT 穿透:只要 VPN 中的一个节点允许在公共 IP 地址上接收连接(即使是动态 IP 地址),tinc 就能进行 NAT 穿透,允许节点之间直接通信。
- 易于扩展网络节点:当你想要添加节点到你的 VPN 时,你只需要添加一个额外的配置文件,无需启动新的守护进程或创建和配置新的设备或网络接口。
- 能够桥接以太网段:你可以将多个以太网段链接在一起,使其像一个单一的段一样工作,允许你在互联网上运行通常只在 LAN 上运行的应用程序和游戏。
三. 传统的VPN:
传统的虚拟专用网络(VPN)主要有以下几种类型:
- IPsec VPN:IPsec VPN 是一种网络层的 VPN 技术,它使用 IPsec 协议来加密数据,确保数据在传输过程中的机密性和完整性。
- GRE VPN:GRE(Generic Routing Encapsulation)VPN 是一种使用 GRE 协议建立的 VPN,它可以封装各种网络层协议,用于在不同网络之间建立直接的虚拟网络连接1。
- L2TP VPN:L2TP(Layer 2 Tunneling Protocol)VPN 是一种数据链路层的 VPN 技术,它通常与 IPsec 协议一起使用,以提供安全的隧道。
- MPLS VPN:MPLS(Multi-Protocol Label Switching)VPN 是一种在 MPLS 网络上实现的 VPN,它可以提供高效的、可扩展的、基于网络层的虚拟私有网络1。
- SSL/TLS VPN:SSL/TLS VPN 是一种应用层的 VPN 技术,它使用 SSL/TLS 协议来加密数据,通常用于提供远程访问 VPN 功能。
索引使用的前提
首先,是前面提到的Access Method, 然后是使用的operator class, 以及opc中定义的operator或function;
其次,遵循CBO的选择
#seq_page_cost = 1.0
#random_page_cost = 4.0
#cpu_tuple_cost = 0.01
#cpu_index_tuple_cost = 0.005
#cpu_operator_cost = 0.0025
#effective_cache_size = 128MB
最后,遵循完CBO的选择, 还需要符合当前配置的Planner 配置
#enable_bitmapscan = on
#enable_hashagg = on
#enable_hashjoin = on
#enable_indexscan = on
#enable_material = on
#enable_mergejoin = on
#enable_nestloop = on
#enable_seqscan = on
#enable_sort = on
#enable_tidscan = on
ERROR: Functions in index expression must be marked IMMUTABLE
函数索引引用的函数必须是immutable类型
函数建分区表
按周生成分区表
do
$$
DECLARE base text; --生命sql类型
pgsqltest text; --字符串为文本类型,执行函数
i int; --i为整数
BEGIN
base = 'create table main_history_p_%s partition of main_history_p for values FROM (''%s'') to (''%s'')';
FOR i IN 0..11 loop --不是左闭右开
pgsqltest = format(base,
to_char('2024-01-01'::timestamp + (i || 'week')::INTERVAL, --第一个%s占位符
'YYYYMMDD'),
'2024-01-01'::timestamp + (i || 'week')::INTERVAL, --第二个%s占位符
'2024-01-01'::timestamp + (i + 1 || 'week')::INTERVAL); --第三个%s占位符
--raise notice '%', sqlstring;
EXECUTE pgsqltest; --执行sqlstring
END loop; --结束loop
END --结束begin
$$language plpgsql; --结束函数
按月生成分区表
do
$$
DECLARE base text; --生命sql类型
pgsqltest text; --字符串为文本类型,执行函数
i int; --i为整数
BEGIN
base = 'create table main_history_p_%s partition of main_history_p for values FROM (''%s'') to (''%s'')';
FOR i IN 0..11 loop --不是左闭右开
pgsqltest = format(base,
to_char('2024-01-01'::timestamp + (i || 'month')::INTERVAL, --第一个%s占位符
'YYYYMMDD'),
'2024-01-01'::timestamp + (i || 'month')::INTERVAL, --第二个%s占位符
'2024-01-01'::timestamp + (i + 1 || 'month')::INTERVAL); --第三个%s占位符
--raise notice '%', sqlstring;
EXECUTE pgsqltest; --执行sqlstring
END loop; --结束loop
END --结束begin
$$language plpgsql; --结束函数
PL/pgSQL编写造数据脚本
1.编写SQL脚本,插入到main_history表
1.1 创建表
CREATE TABLE main_history (
amount int4 NULL,
"content" varchar NULL,
main_id int4 NULL
);
1.2 批量插入
--_configList 使用 “_” 前缀来标识变量,用于区分sql中的字段
CREATE OR REPLACE FUNCTION batchInsert(_configList varchar[][], _main_id int) RETURNS void AS $$
DECLARE
_config varchar[];
_content varchar;
_amount int;
BEGIN
--获取二维数组的每个一维数组
FOREACH _config SLICE 1 IN ARRAY (_configList) LOOP
_content := _config[1];
_amount := _config[2];
--把变量输出到控制台
RAISE NOTICE 'config = %, content = %, amount = % main_id = %', _config, _content, _amount, _main_id;
--用变量拼接sql语句并且实际运行在server上
INSERT INTO main_history (amount, content, main_id) VALUES (_amount, _content, _main_id);
END LOOP;
END;
$$ LANGUAGE plpgsql;
--使用函数
select batchInsert(ARRAY[['ccontent1', '1'], ['content2', '2']], 1);
--删除函数
drop function batchInsert;
2. 函数说明
2.1 声明数组
声明的时候可以不额外区分一维、二维数组
_configList varchar[][] 和 _configList varchar[] 是一样的
2.2 数组赋值
声明为varchar后,赋值时也要是varchar类型。
_configList varchar[][] := (ARRAY[[‘ccontent1’, ‘1’], [‘content2’, ‘2’]]);
2.3 数组遍历
二维数组的遍历
–_configList 由外部传入, 而FOREACH SLICE IN ARRAY都是关键字
FOREACH _config SLICE 1 IN ARRAY (_configList) LOOP
_content := _config[1];
_amount := _config[2];
END LOOP;
Windows操作系统在发起请求连接时,将临时端口(范围通常为1024至65535)可能会导致以下后果:
- 无法建立新的网络连接:当所有临时端口都被使用时,新的网络连接将无法建立。这可能会导致应用程序无法访问网络资源,或者无法接受新的网络连接。
- 网络性能下降:当临时端口用完时,操作系统可能会出现网络性能下降的情况。这是因为新的连接无法建立,现有连接无法释放,导致网络拥塞和延迟增加。
- 应用程序错误:一些应用程序可能会因为无法建立新的网络连接而出现错误或崩溃。特别是那些需要大量网络连接的应用程序,如服务器软件或P2P应用程序。
- 系统不稳定:在极端情况下,如果临时端口用完并且系统无法正常处理网络连接,可能会导致操作系统变得不稳定,甚至出现死机或崩溃的情况。
关于商业
001.
我们买下壁垒。
002.
在商界,有条非常有用的古老守则,它分两步:
1.找到一个简单的、基本的道理;2.非常严格地按照这个道理去行事。
003.
听着,经商很容易。在军队时玩扑克和年轻时当律师的经历磨练了我的商业技能。你必须学会的是:
如果劣势大、优势小,胜算不大的时候你就跑;唯有在劣势大、优势也大的时候,你才有事情要忙。因为占尽优势之事并不常有。
004.
能找到好打猎的地方是本事。无论是谁,到了好打猎的地方,都能打到更多东西。
005.
我曾遇到一个卖鱼钩的家伙。 我问他:“天哪,你这些鱼钩居然是绿色和紫色的。鱼真的会上钩吗?” 他说:“先生,我可不是把鱼饵卖给鱼的呀。”
006.
别只是因为一样事实或一种观念容易得到,就觉得它更为重要。
007.
给你带来麻烦的,不是坏主意,反而常常是好主意。你也许会说:“那不可能。这是相互矛盾的。” 但格雷厄姆想说的是,如果一件事情是坏主意,你不会做过头;但如果它是好主意,蕴含着重要的真理,那你就没办法忽略了。然后你就很容易做过头,接着,遭受可怕的后果。
008.
作为一个生意人,我亲身学到下面的道理:运转良好的东西,如果得到鼓励和支持,通常能够表现得更好。 与之相反,运转糟糕的东西往往是无法被改正的,或者能够被改正,但难度比你们可能想到的要难10倍。 所以好企业和差企业的区别在于,好企业可以轻松地做出一个又一个的决定,差企业则得一次又一次痛苦地做出决定。
009.
网络电视在它的鼎盛时期,任何人都能经营并且做出很好的业绩。如果是汤姆·墨菲在经营,成绩会很好;但就算是由你那傻瓜侄子来经营,也能有很好的表现。
010.
平均下来,赌企业的品质要好过赌经理人的素质。换句话说,如果你必须选一个的话,那就赌企业的发展势头,而不是经理人的聪明才智。
011.
别因为过度关心细节而忽略显而易见的东西。
012.
在得克萨斯制作砖块的流程跟在美索不达米亚是相同的。
013.
别只看到钱,要选择那些“你愿意与他交朋友的客户”。
014.
我们不跟上门推销的人打交道。如果你只是坐着,等交易上门,那么你坐的位子就会非常危险。
015.
大自然的铁律是“种瓜得瓜,种豆得豆”。如果你想要蚂蚁过来,那就得先在地板上撒糖。
016.
带来新客户的最佳办法就是把案头工作做好。
017.
每个人都有一些捷径来判断一个人,伯克希尔有一个非常重要的特质——我们只跟优秀的人共事:
如果一个人是醉鬼,你肯定一眼就能看出来;
一座山如果像珠穆朗玛峰一样矗立在那里,你不必是个天才,也能明白那是一座高山。
018.
有个苏联工人曾这么说:“他们假装给薪水,我们假装在工作。”也许最重要的管理原则就是,“制定正确的激励机制”。
019.
卡内基一直为自己只领很少的薪水而自豪。我也很高兴摆脱了基于业绩领取报酬的压力。 如果你非常认真负责,讨厌令人失望,就会产生不能辜负自己所领的激励报酬的压力(不再因为管理伯克希尔而从利润中抽取一定比例作为报酬,他们的利益就会与其他股东的利益完全一致),这样就拥有了巨大优势。
020.
你一定要和高水准的人做生意,永远不要和一头猪玩摔跤。因为如果你这么做了,你们两个都会变脏,但是猪会乐在其中。
021.
当你把大便跟葡萄干混在一起时,它仍然是大便。
022.
霍华德·阿曼森讲过这样一句话:“千万别低估高估自己的人。”
023.
我曾听沃伦·巴菲特,不止一次地指出: “驱动这个世界的不是贪婪,而是妒忌。”
人生三乐
知足常乐
助人为乐
自得其乐