分类 技术 下的文章

在数据库设计中,我们经常会遇到以下三种关系类型:1:1(一对一)、1:n(一对多)和n:m(多对多)关系。这些关系描述了不同实体之间的连接方式和数量关系。而下面这首节选诗可以有助于对实体关系的理解。

一沙一世界,一花一天国,君掌无限天,刹那即永恒
  • "一沙一世界" 可以对应数据库中的 1:1 关系,表示两个实体之间的一对一关联。这意味着一个实体只与另一个实体相关联,就像每一粒沙子都代表一个世界。
  • "一花一天国" 可以对应数据库中的 1:n 关系,表示一个实体与多个相关实体之间的关联。就像每朵花都代表一个天国,一个实体(花)可以与多个相关实体(天国)相关联。
  • "君掌无限天,刹那即永恒" 可以对应数据库中的 n:m 关系,表示两个实体之间的多对多关联。一个实体可以与多个其他实体相关联,并且每个实体也可以与多个其他实体相关联。这种关系就像君主掌握着无数个天国,同时每个刹那都可以代表永恒。

这样的比喻有助于理解不同的数据库关系类型。在数据库设计中,通过对这一首诗歌的记忆并映射到关系上,进一步加深对实体关系联系的理解,再通过这些关系来建立实体之间的关联,确保数据的一致性和准确性。

I recall the events of the outbreak at the end of 2022 when AI was able to generate pictures with just a few prompts, or even more accurately if desired. Then at the beginning of 2023, the chatGPT (module GPT3.5) was released and entered into the public sphere, creating the illusion that there had been a recent breakthrough in AI-generated content. Despite my initial skepticism towards AI’s potential applications in our daily lives, I found myself engaged in arguments with people on the internet once I started using chatGPT as an assistant.

In recent months, I have come across numerous articles, telegram groups, news items, and software related to AI-generated content. While I recognize that AI is a time-saving tool, I am increasingly wary of its proliferation and wonder if we should take a moment to reflect on what we stand to gain and lose from its use.

While it may sound clichéd, having a thought process is essential and can help one articulate their goals more clearly. It is important to recognize that AI still requires content to be fed to it for training purposes and does not inherently “understand” like humans do. Its intelligence is derived from a corpus that is open and marked through many years of efforts such as essay writing, marking, experimentation, and so on. The most crucial part of the process is the marking phase.

Therefore, the more garbage that is present on the internet, the more garbage AI is likely to output. As someone once said, “because some of that is reflecting back whatever trash these things have been fed on.”

Naturally, AI is like a mirror that reflects the content you input. This is why I am not optimistic about the AI that is currently being trained by domestic companies, given the prevalence of garbage content on the domestic internet. For example, when I encountered Baidu’s Wen Xing Yi Yan, they claimed it was nearly equivalent to chatGPT, but in reality, its performance resembled more of a chatPPT than a chatGPT.

It seems like I have a negative opinion about whether companies like Baidu can create an AI like GPT. I must admit that I do have doubts, but I also hope that a competitor will emerge and motivate them to take action instead of waiting for GPT to dominate the market, leaving no space for anyone else. The old ways are becoming obsolete; now we need to create rather than just copy from others.

基础知识
2023-06-17T06:03:58.png

2023-06-17T06:04:33.png

2023-06-17T06:04:47.png

2023-06-17T06:04:58.png
计算技巧
通常计算思路(子网规划)

某一主机地址 + 主机位数(子网掩码) <–> 子网掩码(主机位数) <–> 主机数(块大小) <–> 广播(网络)地址

知道两个可以推出剩余的所有信息

超网计算

计算原理:写出不同位数的二进制进行相与

技巧:通过熟记2从0-8的次方的数据进行凑数

示例:
2023-06-17T06:05:20.png
12=4+8

13=4+8+1

14=4+8+2

15=4+8+2+1

掩码位数:8+8+(8-2)=22

判断是否(不)在某一子网内(非C类)

先按照通常计算思路算出必要信息:子网掩码(主机位数),主机数。通过是在哪一类中判断是A , B , D类网络,然后用对应主机数除256估算大致要的位数,最后写出范围进行判断

示例:
2023-06-17T06:05:38.png

介绍

IPFS是一种分布式的文件系统,它被设计成一个可自我升级、内容可寻址、超时无关、内容版本化、数据加密等特性的文件系统。IPFS的设计目标是为了解决现有互联网中存在的问题,比如集中式的控制、数据不可靠、内容易丢失等问题。它使用类似于BitTorrent的协议来在网络中传输和存储文件。IPFS通过将文件分成小块来存储,每个小块都有一个唯一的哈希值来标识它。这些小块可以被存储在不同的节点上,形成一个分布式的网络。

在IPFS中,每个节点都可以成为一个文件的提供者,也可以下载其他节点上的文件。当一个节点请求一个文件时,它会先查询网络中是否有拥有这个文件的节点,如果有,则直接从这个节点下载文件;如果没有,则会从网络中的其他节点上下载文件的各个小块,最终将它们组合起来形成完整的文件。

IPFS为什么日常生活中非常少见

IPFS作为一个新兴的分布式存储技术,目前在日常生活中还比较少见,可能是因为以下几个原因:

  • 相对传统的中心化存储方式,IPFS是一个比较新的技术,需要更多的时间来发展和普及,目前大多数人还不太熟悉它。
  • IPFS存储效率和可靠性等方面还需要进一步优化。
  • 目前大部分的互联网应用都是基于中心化的存储方式,IPFS需要与这些应用进行整合才能更好地得到应用和推广。
  • IPFS对于普通用户来说,需要一定的技术门槛和学习成本。

优点

  • 去中心化:IPFS是一种点对点协议,文件存储在网络的不同节点上,没有单一的中心服务器,因此具有去中心化的特点。
  • 可持续性:IPFS使用内容寻址,文件内容的哈希值作为文件的唯一标识,确保文件的不变性和可验证性。这样,即使某个节点下线或删除了文件,其他节点仍然可以访问和下载该文件。
  • 压缩和重复数据消除:IPFS使用数据块存储和哈希索引,对重复数据进行去重,实现存储空间的压缩,提高网络带宽利用率。
  • 高效:IPFS的点对点网络结构和分布式哈希表使得数据访问和传输更加高效,可以更快地下载和分享文件。
  • 可扩展性:IPFS的网络结构和协议设计具有可扩展性,可以通过添加更多节点和扩展协议来增加网络的容量和性能。
  • 安全:IPFS使用公钥加密和数字签名等技术保障数据传输和访问的安全性。此外,由于文件内容通过哈希值唯一标识,可以防止恶意文件的篡改和传播。

缺点

  • 性能:IPFS的性能取决于许多因素,如网络速度、节点数量和质量等。在网络速度缓慢的情况下,文件传输可能会变得缓慢。节点质量差的情况下,可能会影响到整个网络的稳定性和可用性。
  • 隐私:在IPFS网络中,文件是公开的,任何人都可以访问。这意味着用户无法完全控制他们共享的数据,这可能会引起隐私问题。
  • 存储成本:虽然IPFS可以为分布式存储带来更低的成本和更高的可用性,但在某些情况下,它需要很高的存储成本,尤其是在需要存储大量数据的情况下。
  • 安全性:尽管IPFS采用了多种加密技术来确保数据的安全性,但在某些情况下,仍然存在安全问题。例如,攻击者可能会通过篡改文件或污染网络来攻击IPFS网络。

安全方面

  • 私钥安全:在使用IPFS的加密功能时,用户需要妥善保管私钥,避免私钥被他人窃取或泄露,从而导致加密数据被解密。
  • 访问控制:用户需要根据实际需求设置合适的访问控制策略,防止未授权的访问和篡改。
  • 安全传输:在IPFS中传输数据时,需要采用安全的传输协议,确保传输过程中数据不被窃取或篡改。
  • 恶意攻击:用户需要防范可能的恶意攻击,如DDoS攻击、IP欺骗等,避免数据被破坏或篡改。
  • 安全存储:用户需要选择可信的IPFS节点或存储服务提供商,并备份数据以防数据丢失。

Git作为版本控制系统控制的本质上还是文件,为什么不能和IPFS相提并论

虽然Git和IPFS都可以管理文件,但是它们的本质和设计目的有很大的不同。

Git的主要目的是管理代码的版本控制,它可以记录代码的修改历史和不同版本之间的差异,方便开发者进行协作和版本回溯等操作。Git将文件存储在本地的仓库中,并使用SHA-1哈希值作为唯一标识来管理和区分不同的版本。Git的分布式架构可以让开发者在本地进行代码管理和提交,也可以通过远程仓库进行代码共享和协作。

Git 的核心是一个分布式版本控制系统,用于管理和跟踪文件的版本、更改和提交记录。Git 将版本信息存储在本地仓库中,并且可以将这些信息推送到远程仓库进行共享。在 Git 中,每个提交都有一个唯一的哈希值,用于表示特定版本的文件内容。这些哈希值不依赖于文件的内容本身,而是依赖于 Git 的版本控制系统。虽然Git也可以使用IPFS作为存储后端来实现Git 可以用来管理除了代码以外的各种类型的文件,包括文档、图片、音频、视频等等。与 IPFS 类似,Git 也可以在本地和远程储存库之间进行数据传输。

Git 和 IPFS 的根本区别在于其底层架构和设计理念。IPFS 的设计理念是建立一个分布式的超媒体协议,通过对等网络连接和数据传输来储存和检索文件。IPFS 通过唯一标识符(CID)来标识文件,该标识符是基于文件的内容计算出来的,因此不仅包括文件的哈希值,还包括文件的内容。与 Git 不同,IPFS 不仅可以储存和共享文件,还可以储存和共享任何类型的数据,包括 Web 应用程序和数据库等。IPFS 还具有去中心化的特点,每个节点都可以同时作为客户端和服务器,从而实现更加灵活和高效的数据传输。与 Git 不同,IPFS 还提供了多种加密和身份验证机制,以确保数据传输的安全性和可靠性。

同样是打标签,为什么Git标识不能等同于IPFS标识

虽然Git和IPFS都有标识文件的机制,但是它们的实现方式和目的是不同的。Git中的标签主要用于标识某个提交,以便于在代码仓库中进行版本控制和管理。这些标签通常是通过对Git中的提交计算哈希值生成的,并且在Git的本地仓库和远程仓库中都是相同的。

而IPFS中的CID则是用于唯一标识IPFS网络中的数据块,它是通过对数据块进行哈希计算得到的。不同于Git,IPFS中的数据块是可以在网络中传输和共享的,因此CID的作用是保证IPFS网络中的数据块可以被唯一地识别和定位,从而实现数据在网络中的去中心化存储和访问。

此外,Git和IPFS的根本区别在于它们的存储和分发方式不同。Git是一种分布式版本控制系统,但它的本质还是基于中心化的代码仓库,而IPFS则是一种完全去中心化的数据分发协议。IPFS的目标是建立一个全球性的、可持久化的数据存储和分发网络,而Git的目标则是更好地管理代码的版本控制。因此,虽然它们在某些方面有一定的相似之处,但是它们的实现方式和目标还是存在较大的差异。

GitHub要如何做才能实现IPFS的架构

要实现IPFS的架构,GitHub需要重新设计其存储和分发文件的方式。可能需要使用一种新的文件系统,并且需要建立一个类似于IPFS的分布式网络来存储和传输文件。此外,GitHub还需要考虑如何管理文件的版本和历史记录,以及如何确保文件的完整性和安全性。实现步骤如下:

将现有的Git仓库转化为IPFS对象:GitHub可以将所有Git仓库中的文件转化为IPFS对象并存储在IPFS网络中,从而实现去中心化的存储和分发。这样一来,用户可以从IPFS节点上直接获取Git仓库中的文件,而不需要通过GitHub服务器进行访问。
采用IPNS实现域名解析:GitHub可以使用IPNS(InterPlanetary Name System)来实现域名解析,将GitHub的域名指向IPFS网络中的内容,从而实现去中心化的访问。这样一来,用户可以通过浏览器直接访问GitHub中的内容,而不需要经过GitHub服务器的中转。
建立IPFS节点:GitHub可以建立自己的IPFS节点,从而参与到IPFS网络中,并向其他节点提供服务。这样一来,GitHub可以通过IPFS网络进行内容分发,从而减轻自己服务器的压力,并提高内容的可靠性和可访问性。
加强安全性保护:在实现IPFS架构的过程中,GitHub需要加强安全性保护,确保用户数据的安全性和隐私性。GitHub可以采用加密、身份验证等方式来保护用户数据,并避免出现安全漏洞和攻击。

IPFS + CDN加速访问

IPFS可以结合CDN进行访问寻址的加速。由于IPFS的分布式存储特性,数据通常分散在全球不同地方的许多节点上。这导致了一些潜在的性能问题,例如访问延迟和带宽限制。通过使用CDN作为IPFS的前端,可以加速IPFS网络的访问和传输,降低节点之间的延迟和负载,提高数据的可访问性和可用性。CDN可以将IPFS节点中的数据缓存到本地服务器上,并通过全球各地的多个边缘节点提供服务,以便用户可以更快地访问数据。此外,使用CDN还可以提高IPFS网络的安全性,通过限制直接访问IPFS节点的用户,减少了IPFS网络面临的潜在攻击面。

将IPFS的分布式存储和CDN的访问加速相结合,可以实现更好的效果。例如,可以将常用的内容缓存在CDN节点上,减少节点间的数据传输量,提高访问速度。同时,由于IPFS的去中心化特点,可以避免CDN节点单点故障和数据安全性等问题。

IPFS底层协议为什么用TCP实现而不是UDP

IPFS底层使用的是TCP协议实现的。虽然IPFS可以支持各种传输协议,但是当前默认使用的是TCP协议进行数据传输。虽然 UDP 确实比 TCP 更快,但是 UDP 并不太适合 IPFS 这样的分布式系统。因为 UDP 协议是面向无连接的,它无法保证数据传输的可靠性和有序性,而这些特性是在分布式系统中至关重要的。IPFS 中使用的是 TCP 协议,因为 TCP 是面向连接的,能够保证数据传输的可靠性和有序性,同时 TCP 还支持流控制和拥塞控制等机制,可以更好地适应分布式系统的需求。另外,IPFS 还使用了一些高级协议,如 QUIC 和 libp2p,来提高传输速度和可靠性。

IPFS中的标记(CID)只是用于唯一标识每个内容块,而内容块之间的传输和网络连接则需要通过网络协议来实现。IPFS实现文件传输的底层协议是libp2p,而libp2p使用的是多种传输协议,其中包括TCP和UDP。因此,在实现文件传输时,TCP和UDP都可以作为IPFS底层传输协议的一种选择。

因此,在IPFS的设计中选择TCP作为底层传输协议,主要是考虑到IPFS需要在分布式网络中实现高效且可靠的文件传输,TCP在这方面相对较优。

IPFS + AIGC前景

在未来,AIGC(Artificial Intelligence Generated Content)或其他云计算平台可以利用IPFS的去中心化存储和传输功能来改进其基础架构。通过使用IPFS,AIGC可以实现以下几点:

分布式存储:AIGC可以将其数据存储在IPFS网络中的分布式节点上,从而获得更高的可靠性和冗余性,避免单点故障和数据丢失的风险。
更快的传输速度:由于IPFS可以从最近的节点获取数据块,因此可以实现更快的传输速度和更低的延迟,从而提高AIGC的计算效率。
加强隐私保护:通过使用IPFS,AIGC可以将其数据分散在多个节点上,从而减少数据被窃取或篡改的风险,提高数据的安全性和隐私保护。

实际应用操作

1.下载并安装IPFS客户端:IPFS官网提供了多个操作系统的客户端程序下载,可以根据自己的操作系统版本下载对应的程序并进行安装。
2.初始化IPFS:在安装好客户端后,需要通过命令行输入ipfs init命令来初始化IPFS。此时,IPFS会为用户生成一个唯一的节点ID,并在本地创建一个存储区域,用于存储IPFS网络上的文件和数据。
3.添加文件到IPFS:将需要共享的文件添加到IPFS网络上,可以通过命令行输入ipfs add 来实现。添加文件后,IPFS会为文件生成一个唯一的哈希值,可以通过这个哈希值来访问和共享该文件。
4.获取IPFS网络上的文件:如果需要从IPFS网络上获取文件,可以通过命令行输入ipfs get 来获取指定哈希值的文件。获取文件后,可以将文件保存到本地文件系统中,并进行查看和使用。
5.发布IPFS内容:如果需要将自己的内容发布到IPFS网络上,可以通过命令行输入ipfs name publish 来实现。发布后,IPFS会为内容生成一个唯一的IPNS地址,可以通过该地址访问和共享内容。

需要注意的是,在实际部署IPFS时,需要考虑网络的稳定性、安全性、数据备份等问题,可以选择自己搭建IPFS节点,或者使用第三方的IPFS服务提供商来进行部署和管理。

总结

IPFS是一个分布式的文件系统,它具有内容可寻址、超时无关、内容版本化、数据加密等特性,能够解决现有互联网中存在的问题。通过IPFS,用户可以在网络上存储和共享文件,实现点对点的文件传输,从而实现更加开放、自由和安全的网络。

互联网最初的目的不正是设计IPFS的目的吗?在未来可能出现的去中心化网络架构革命性突破以前,IPFS还有很长的路要走。

kernel32.dll

kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件。

user32.dll

user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。

gdi32.dll

gdi32.dll是Windows GDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字

comdlg32.dll

comdlg32.dll是Windows应用程序公用对话框模块,用于例如打开文件对话框。

advapi32.dll

advapi32.dll是一个高级API应用程序接口服务库的一部分,包含的函数与对象的安全性,注册表的操控以及事件日志有关。

shell32.dll

shell32.dll是Windows的32位外壳动态链接库文件,用于打开网页和文件,建立文件时的默认文件名的设置等大量功能。

ole32.dll

ole32.dll是对象链接和嵌入相关模块。

odbc32.dll

odbc32.dll是ODBC数据库查询相关文件。