tanzhuo

tanzhuo

专研技术的程序员

Neo4j 图形数据库

前言 Neo4j是一款高性能的图数据库,它采用了图形数据模型来存储和处理数据。与传统的关系型数据库相比,Neo4j具有更高的可扩展性和更高效的查询性能,特别适用于需要处理复杂关系数据的应用场景。 Neo4j Graph Database & Analytics – The Leader in Graph DatabasesConnect data as it’s stored with Neo4j. Perform powerful, complex queries at scale and speed with our graph data platform.Graph Database & Analytics Neo4j的收费模式分为两种:开源版和企业版。开源版是免费的,可以用于个人或小型项目。企业版则需要付费,提供更多高级功能和技术支持。 主要功能 图形数据存储和查询:Neo4j使用图形数据模型来存储数据,可以轻松处理复杂的关系数据。 高效的查询性能:由于采用了图形数据模型,
2 min read

数据库分类

数据模型分类 * 关系型数据库(RDBMS):以表格形式存储数据,使用 SQL 语言进行查询和操作。 * 非关系型数据库(NoSQL):不使用传统的关系型数据模型,而是采用其他数据模型,如文档型、键值对、列式、图形等。 处理方式分类 * 事务型数据库:支持事务处理和 ACID 特性(原子性、一致性、隔离性、持久性)。 * 非事务型数据库:不支持事务处理和 ACID 特性,但具有更高的性能和可扩展性。 部署方式分类 * 单机数据库:数据存储在单台计算机上,适用于小型应用。 * 分布式数据库:数据存储在多台计算机上,通过网络进行通信和协作,适用于大型应用和高并发场景。 存储方式分类 * 内存数据库:数据存储在内存中,查询和操作速度非常快,但数据容量受限。 * 磁盘数据库:数据存储在磁盘上,容量较大,但查询和操作速度相对较慢。 访问方式分类 * OLTP 数据库:面向事务型处理,
3 min read

防重复提交

使用Token令牌机制可以有效地防止CSRF攻击和重复提交。在提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。这种方式可以有效地防止重复提交和CSRF攻击,但是需要注意保护Token令牌的安全性,否则可能会被攻击者利用。 Token令牌机制是一种常用的Web应用程序防止重复提交和CSRF攻击的方法。它的基本思想是在每次提交表单时,服务器会生成一个Token令牌,并将其存储在Redis中。然后,将这个Token令牌作为表单的一个隐藏字段或URL参数传递给客户端。客户端提交表单时,将这个Token令牌一并提交给服务器。服务器在处理表单时,会检查这个Token令牌是否正确,并在处理完表单后删除这个Token令牌。 Token令牌机制的实现步骤如下: 在服务器端生成一个Token令牌,并将其存储在Redis中。Token令牌可以使用随机数、UUI
3 min read

Docker 原理

Docker 内部架构可以分为以下几个组件: 组件 描述 Docker Daemon Docker 的主要组件,是一个守护进程,负责管理容器的创建、启动、停止、删除等操作。 Docker Client 与 Docker Daemon 交互的命令行工具,用户可以使用该工具发送命令来操作 Docker 容器。 Docker Registry 存储 Docker 镜像的中央仓库,可以通过 Docker Client 从该仓库中拉取所需的镜像。 Docker Image 容器的基础,是一个只读的文件系统,包含了应用程序、依赖库和配置文件等。可以通过 Dockerfile 文件创建。 Docker Container Docker 镜像的一个实例,包含了一个完整的文件系统、运行时环境和系统工具。 Docker Daemon 和 Docker
6 min read

Mysql 时间四舍五入

MySQL的DATETIME类型是精确到秒的,而Java的LocalDateTime类型是精确到纳秒的。因此,在将MySQL的DATETIME类型存入Java的LocalDateTime类型时,会发生四舍五入的情况。 例如,如果MySQL的DATETIME类型为2022-01-01 12:34:56.789,当它被存入Java的LocalDateTime类型时,会被四舍五入到2022-01-01 12:34:57。 为了避免这种情况,可以使用Java的java.sql.Timestamp类型来存储MySQL的DATETIME类型。这个类型也是精确到纳秒的,与LocalDateTime类型匹配,不会出现四舍五入的问题。
1 min read

数据结构:栈

栈(Stack)是一种先进后出(LIFO)的数据结构,它只允许在栈顶进行插入和删除操作。栈可以用数组或链表来实现。 在栈中,插入和删除操作通常称为入栈(push)和出栈(pop)。当插入一个元素时,它被放置在栈顶,当删除一个元素时,它是从栈顶删除的。栈顶是栈中最新添加的元素,栈底是栈中最早添加的元素。 栈的应用非常广泛,例如,计算机中的函数调用和递归调用都是通过栈来实现的。当一个函数被调用时,它的参数、返回地址和局部变量等信息被压入栈中,当函数返回时,这些信息又从栈中弹出。 以下是栈的基本操作: push(element):将一个元素压入栈顶。 pop():从栈顶弹出一个元素。 top():返回栈顶元素,但不对栈进行修改。 isEmpty():判断栈是否为空。 size():返回栈中元素的个数。 栈的时间复杂度为O(1),因为所有操作都是在栈顶进行的。但是,栈的空间复杂度为O(n),因为需要存储所有元素。 在计算机中,栈(Stack)被广泛应用于函数调用、
2 min read

数据湖 Iceberg

目前比较流行的开源数据湖 Iceberg。 数据湖是一个用于存储结构化和非结构化数据的集中式数据存储库,它可以存储各种类型的数据,包括传统的关系型数据、半结构化数据、非结构化数据等。数据湖的主要特点是具有高度的灵活性和可扩展性,能够方便地进行数据的存储和处理。 相比之下,传统的数据仓库主要用于存储结构化数据,它们通常采用关系型数据库进行存储和管理。数据仓库的主要特点是具有高度的规范化和结构化,能够保证数据的准确性和一致性。但是,数据仓库的缺点在于它们不够灵活,无法存储和处理非结构化或半结构化数据,而且难以进行扩展和升级。 数据湖相比数据仓库的优势主要有以下几点: 1. 存储不受限制:数据湖可以存储各种类型的数据,包括传统的结构化数据、半结构化数据、非结构化数据等。这使得数据湖更加灵活,适用于不同类型和规模的数据存储需求。 2. 处理速度更快:数据湖通常采用分布式存储和计算技术,能够实现高速数据处理和分析。而传统的数据仓库则往往需要进行多次数据转换和计算,导致处理速度较慢。 3. 成本更低:数据湖通常采用开源技术,如Hadoop、Spark等,成本相对较低,而传统的数据仓库
4 min read

Flink CDC 组件

Flink CDC(Change Data Capture)组件是 Apache Flink 的一个重要组成部分,它提供了一种轻松实现数据流变更捕获和同步的方法。在大数据领域,CDC是一个非常常见的技术,因为它能够帮助我们实现数据在不同系统之间的同步和数据的实时处理。 快速上手 — CDC Connectors for Apache Flink® documentation Flink CDC组件的工作原理是通过捕获源数据系统的变更日志,将其转化为数据流并进行实时处理。这个过程可以在不影响源系统的情况下进行,因为CDC组件只是读取源系统的日志,而不会对源系统进行写操作。 Flink CDC组件的优点在于它可以支持多种数据源,包括关系型数据库(如MySQL,Oracle等)和NoSQL数据库(如MongoDB,Cassandra等)。此外,它还能够支持多种数据格式,如JSON,CSV等。 使用Flink CDC组件可以实现实时的数据同步和数据流处理。例如,我们可以使用CDC组件将MySQL数据库中的数据同步到Kafka,然后使用Flink进行实时数据处理。这样就可以实现数据的实时
2 min read

常见 Ingress 对比

本次来对比一下k8s集群中经常使用到的一些 ingress 组件,ingress 它充当了集群中 HTTP 和 HTTPS 流量的入口点。Ingress 可以将流量路由到 Kubernetes 集群内的不同 Service 上,从而实现负载均衡和流量控制的功能。 Ingress 的工作原理是通过将 HTTP 和 HTTPS 请求映射到 Service 上来实现的。在 Kubernetes 中,Service 是一种用于将流量路由到 Pod 的资源对象。当 Ingress 接收到来自外部的 HTTP 或 HTTPS 请求时,它会根据请求中的主机名和路径信息,在 Ingress 规则中进行匹配,并将请求路由到相应的 Service 上。 要使用 Ingress,需要先安装 Ingress 控制器。
2 min read

初探 Server-Mesh

前言 本次技术分享只做技术宏观思维与认知上的分享,具体配置细节与部署不在此次讨论范围。 讨论点: 1、微服务的局限性 2、了解 Server-Mesh 功能与实现方式 3、目前基于 Server-Mesh 而实现的 Serverless 我们最熟悉,最常用的 Java,Spring-Cloud,Spring-Cloud-Alibaba 等技术体系,归属于传统微服务的架构设计,此设计存在SDK强耦合问题,每次底层SDK版本的更新极大可能影响到业务层面的服务稳定性。SDK与代码环境强耦合,就会存在居多限制,不能完整的运用市面上不同语言与其对应的生态组件来做更擅长的领域,例如:灵活快速的Go,Python语言并对应其携程,爬虫,神经网络等等组件。严谨并且0垃圾回收的Rust语言,更适合企业级中间件高效率低内存占用场景。所以每种语言有它各自的优势与生态环境,以更长远的发展来看,大体量的龙头企业将会把业务部署与实现落地到不同的语言上进行迭代是一种趋势。 传统微服务体系图: 并且如今JVM引以为傲的跨操作系统优势,其特性也被K8S,Docker,Containerd,CRI-O,K
19 min read

随心笔记

技术无止境 创新不停驻