首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

Lua查看全文
Lua语言的Logo.jpg
Lua 是一种轻量级、高效的脚本编程语言,其设计目标是为了嵌入 C/C++ 程序中,为主机程序提供灵活的扩展性和定制性。Lua 的解释器非常小巧,只有数十 K,可以轻松嵌入到 C/C++ 程序中,而且具有高效、可扩展、可移植等特点,被广泛应用于游戏开发、Web 开发、嵌入式设备控制等领域。。

动态类型 Lua 是一种动态类型的编程语言,这意味着变量的类型在运行时才会被确定,而不是在编译时确定。这与静态类型语言不同,例如 C、Java 等。 在 Lua 中,变量可以随时更改其类型,它的类型会随着其值的类型而变化。这是因为 Lua 中的变量并不是存储在内存中的,而是存储在 Lua 虚拟机的注册表中。 例如,可以将一个变量初始化为字符串类型,然后将其更改为数字类型。下面是一个示例:在 Lua 中,可以使用函数 type 来获取变量的类型。该函数返回一个字符串,表示变量的类型。下面是一些示例:由于 Lua 是一种动态类型的语言,因此可以使代码更加灵活和易于编写。但是,这也可能导致代码中出现类型错误,因为在运行时才会发现这些错误。为了减少这些错误,可以使用类型检查和其他技术来确保代码的正确性。 跨语言调用 Lua是一种轻量级的脚本语言,因其简洁易学、高效、可扩展等特点,被广泛应用于游戏开发、网络编程、嵌入式设备等领域。在实际应用中,Lua通常需要与其他编程语言进行交互,比如C/C++、Java等。 Lua提供了C API来支持与C语言进行交互,而与其他语言的交互,则需要通过跨语言调用实现。跨语言调用的原理基本上都是一样的,即通过一定的方式将不同语言的函数映射到对方的函数上,以实现相互调用。

具体到Lua中,跨语言调用主要有以下两种方式…
两阶段提交查看全文
两阶段提交.png
两阶段提交(2PC)是分布式事务的一种实现方案。

两阶段提交协议把分布式事务分成两个过程,分别是准备阶段和提交阶段,准备阶段和提交阶段都是由事务管理器(协调者)发起,资管管理器(事务参与者)接收协调者的指令完成事务的执行动作。 两阶段具体分工如下: 准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写redo或者undo日志(这也是前面提起的Write-Ahead Log的一种),然后锁定资源,执行操作,但是并不提交。 提交阶段:如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源。 普通事务的提交也包括写数据阶段和提交阶段,例如Mysql的InnoDB引擎在提交之前,会写入undolog,修改BufferPool,在事务提交的时候会写入redolog。两阶段提交会将提交操作再分为两部分,例如准备提交的阶段会先准备写入redolog,之后写入binlog,再进行提交redolog。 准备阶段 两阶段事务的准备阶段,协调者会对所有的参与者发起准备的指令。 参与者接收到准备指令之后,进行事务操作,本环节的事务操作一般包括资源锁定,记录回滚日志(Undolog),执行成功会给协调者发送成功的返回,否则返回失败。 协调者收到所有参与者的返回都是成功时,而阶段提交会进入提交阶段。

协调者如果收到部分参与者的返回是失败的时候,则将成功的参与者进行回滚。…
MongoDB查看全文
MongoDB存储的概念.png
mongoDB是流行的文档型数据库,使用方式类似于关系型数据库,其存储模型bson在JSON基础上进行了扩展,介于结构化存储和非结构化存储之间。

mongoDB具有以下特点: 面向集合存储,易存储对象类型的数据。 模式自由。 支持动态查询。 支持完全索引,包含内部对象。 支持查询。 支持复制和故障恢复。 使用高效的二进制数据存储,包括大型对象(如视频等)。 自动处理碎片,以支持云计算层次的扩展性 支持python,java,C++,php等语言的驱动程序,社区中也提供了对 Erlang,.NET等平台的驱动程序。 可通过网络访问。 mongoDB的概念和数据库概念可以逐级类比。 mongoDB数据库中的数据采用bson的方式存储,bson是从json引申出来的概念,含义为binary JSON。从本质上来看,bson是json的一个超集,除了字符串,整形,bool之外,bson还支持时间类型以及字节数组。 BSON数据结构以及和json的关系如下所示: 索引 mongoDB的索引分为几类: 单键索引 单键索引就是单独的字段作为索引列,mongoDB所有的collection默认都会有一个单键索引_id。_id一般是通过客户端生成,当写入数据不包含该字段的时候,服务端进行生成。_id由12个字节组成,依次是4个字节的Unix时间戳,3个字节的机器ID,2字节的进程ID,3个字节的计数器。 复合索引 复合索引是指包含多个字段的索引,用法和单键索引类似。 mongodb的索引采用B+树进行存储。出了普通的B+索引之外,MongoDB还支持以下的索引结构:

哈希(HASH)索引,哈希是另一种快速检索的数据结构…

热门分类

算法题库

精选内容