TCDatabase,是我在创新院的同事,riceball的一个开源项目。http://code.google.com/p/tcdatabase
他自己也写了两篇blog作介绍。tcdatabase(一) tcdatabase(二)
不过我总感觉写得太像干巴巴的技术文档了,所以我自告奋勇的来帮他另写一个介绍,以下是第一部分:
一、TokyoCabinet、TokyoTyrant简介
我们常说的TC/TT,是TokyoCabinet/TokyoTyrant的简称。这两个开源项目,都是由日本人平林幹雄开发的。(Mikio Hirabayashi’s Homepage twitter: @hirabayashiM)
1、TokyoCabinet
TC,是一个Key-Value的数据库library,你可以通过C语言程序来访问TC提供的各种函数,也可以使用其他各种语言绑定,例如perl、ruby、java、lua。
TC对外的表现形式,无非是一组put/get方法,从内部实现来说,TC一共支持6种不同的数据结构,包括hash数据库,B+树数据库,定长数据库、表格数据库、内存hash数据库以及内存B+树数据库。
以ruby语言举例:
hdb = HDB::new
hdb.open("casket.tch", HDB::OWRITER | HDB::OCREAT)
hdb.put("foo", "hop")
value = hdb.get("foo")
hdb.close
这样就可以创建一个名为casket.tch的Hash数据库文件,并进行put/get的操作。
也可以通过ADB(Abstract database),以完全相同的API,创建并访问不同的数据库。
adb = ADB::new
adb.open(name)
…
adb.close
其中,如果name为*,则创建一个内存hash数据库;name为+,则是内存B+树数据库;文件名为*.tch、*.tcb、*.tcf、*.tct则分别对应于hash、B+Tree、fixed-length和table类型。
2、TokyoTyrant
至于TT,则是在TC基础上实现的一个server。TT接受来自socket连接的各种请求,作为一个网络服务而存在着。通常我们会这样来启动TT。
ttserver –port 3900 /ttdata/casket.tch
这样,在3900端口,就启动了一个数据库服务,这个数据库的数据,就保存在/ttdata/casket.tch中。
而在client端,也多种不同的语言实现,例如ruby的代码会写成这样:
rdb = RDB::new
rdb.open("localhost", 3900)
rdb.put("foo", "hop")
value = rdb.get("foo")
rdb.close
对于table类型的数据库,则需要创建一个RDBTBL的对象实例,因为它提供了更多的一些访问API,例如:
rdb = RDBTBL::new
rdb.open("localhost", 1978)
rdb.put("1", { "name" => "mikio", "age" => "30", "lang" => "ja,en,c" })
qry = RDBQRY::new(rdb)
qry = RDBQRY::new(rdb)
qry.addcond("age", RDBQRY::QCNUMGE, "20")
qry.addcond("lang", RDBQRY::QCSTROR, "ja,en")
qry.setorder("name", RDBQRY::QOSTRASC)
qry.setlimit(10)
res = qry.search
res.each do |rkey|
rcols = rdb.get(rkey)
printf("name:%s\n", rcols["name"])
end
这样的操作,就已经相当接近于对一个传统表的操作了。
二、TCDatabase对TokyoTyrant的扩展
1、skeleton机制
TT对于扩展的支持相当友好,在ttserver中,有一个-skel参数,可以在启动ttserver的时候,挂一个自己写的骨架系统,例如:
ttserver -skel mydb.so -port 3900 myfile.tct
这样,ttserver的功能,就成了一个简单的网络接口,而接收到的各种请求,都为转交给mydb.so来处理。接下来的事情,就海阔天空了。对于client端来说,他访问的是标准的TT接口,而在server端,却完全可以通过自己写的一个扩展,将数据存到mysql里面去。
而tcdatabase,就是TT的一个skeleton实现。所以,他的启动参数是这样的:
ttserver -skel tcdatabase.so -port 3900 db_filename.tcb
2、TCTDB的不足之处
作为最像传统表的Key-Value数据库,TCTDB有很多优点,这成为我们项目选择的主要考虑对象,但是它也存在着诸多问题:
- 一个Table Database仅支持一个表,也就是说value中的字段必须固定一致。假设一个项目中使用了80多个表,这意味着你需要开启80多个 ttserver进程,并为每一个“表”提供支持。
- 功能的增强,也就意味着要牺牲性能。TCTDB 表格型数据库的平均读取速度大约在40万条/秒,相比 TCHDB哈希数据库的180万条/秒和TCBDB B+Tree数据库 的100万条/秒要慢。
- TCTDB虽然可以建立数值型索引,但是它是将所有value数据都当成字符型来处理的,无法区分value类型。
- TCTDB单数据库文件存储的记录数上亿条后,性能会有比较明显的下降。
- 不能单独获取value中的某一个字段的值;
- 不能支持仅更新UPDATE key中某一个字段:必须先取出value的全部字段,再存入;
3、TCDatabase的改进
- 支持多个table从一个端口访问,从table变成真正的database,
- 数据文件改用采用TCBDB(B+Tree Database)进行存储,为了解决数据量上亿后的HashDB性能的问题
- 支持列读写
- 应该还有其它更多改进,不过都还在规划之中
(待续)
分享到:
相关推荐
1. **全文检索**: 全文检索是数据库系统中的一项重要功能,它允许用户在数据库中搜索包含特定词汇的记录。TCDatabase 支持全文检索,意味着你可以方便地对存储在 SQLite 数据库中的文本数据进行高效搜索,这对于需要...
物联网_Android蓝牙双模开发_基于BLE40和BLE50的双通道蓝牙通信框架_支持多设备并发管理与自定义数据包解析的智能硬件控制SDK_适用于智能家居和工业物联网场景的蓝
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
在线教育_微信小程序云开发_课程预约管理系统_基于腾讯云开发的智能在线课程预约平台_包含课程时间管理_学员自助预约_多维度签到核销_数据导出分析_适用于教育培训机构_健身房_企业内
内容概要:本文详细介绍了如何使用MATLAB实现改进二进制粒子群算法来解决含需求响应的机组组合问题。文章首先构建了机组组合问题的基本模型,定义了机组的数量及其最小和最大发电功率等参数。接着,在此基础上加入了需求响应机制,通过设置需求响应的最大可削减负荷量和补偿系数,实现了对负荷侧的管理。为了提高求解效率,采用了一种改进的二进制粒子群算法,该算法通过独特的更新策略使粒子更快更准地找到最优解。此外,还讨论了微电网调度中如何降低发电成本并确保供电稳定性,强调了需求响应在优化调度中的重要性。 适合人群:对电力系统优化、机组组合问题、需求响应机制以及改进粒子群算法感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要优化电力系统调度的研究项目或实际工程应用,旨在通过引入需求响应机制和改进的粒子群算法,降低发电成本,提高系统的灵活性和经济效益。 其他说明:文中提供的MATLAB代码示例有助于理解和复现算法的具体实现,同时提醒了一些常见的陷阱和注意事项,如负荷预测误差的影响和合理的参数选择。
chromedriver-linux64-138.0.7153.0.zip
内容概要:本文详细介绍了基于领航跟随者和滑膜控制的多智能体编队仿真控制系统。首先阐述了领航跟随者策略的工作原理,即由一个领航者决定编队的整体运动方向和其他跟随者根据相对位置进行调整。接着解释了滑膜控制的作用及其在编队控制中的优势,特别是在应对环境干扰和实现精准轨迹跟踪方面的能力。文中提供了具体的Matlab代码示例,涵盖智能体初始化、障碍物检测与避障机制、领航者轨迹生成、滑膜控制器的设计以及队形变换等多个重要环节。此外,作者还分享了一些实用的经验和技术细节,如数值积分步长选择、避障算法优化等。 适合人群:对多智能体系统、编队控制、滑膜控制感兴趣的科研人员、研究生及工程师。 使用场景及目标:适用于需要理解和实现多智能体编队控制系统的场合,特别是涉及无人机编队飞行、自动驾驶车辆协同作业等领域。目标是帮助读者掌握领航跟随者策略和滑膜控制的具体实现方法,提高编队系统的稳定性和灵活性。 其他说明:文中提到的代码可以在Matlab环境下运行,提供了完整的编队控制流程演示,有助于加深对相关概念的理解。同时,文中讨论的一些优化措施也为进一步的研究提供了有价值的参考。
内容概要:本文详细介绍了如何在Matlab中进行常见分布函数的拟合及其KS检验。首先概述了几种常见的概率分布,如正态分布、对数正态分布、伽马分布、威布尔分布、指数分布、瑞利分布和极值分布等。然后通过具体的Matlab代码展示了如何生成示例数据,并利用fitdist函数对这些分布进行拟合。接下来,使用kstest函数进行了KS检验,以评估数据是否符合所拟合的分布。文中还强调了KS检验的局限性和注意事项,如参数估计的影响和p值的解释。最后,通过可视化手段进一步验证了拟合的效果。 适合人群:具备一定数学和编程基础的数据分析师、科研工作者及学生。 使用场景及目标:适用于需要对数据进行概率分布拟合和检验的实际应用场景,如金融风险评估、可靠性分析、信号处理等。目标是帮助读者掌握Matlab中分布拟合和KS检验的具体实现方法,提高数据分析能力。 其他说明:文章不仅提供了详细的代码示例,还讨论了实际应用中的注意事项,如参数估计质量、p值解释和物理意义的选择。同时,强调了KS检验作为参考工具的作用,不应过分依赖统计检验结果,还需结合业务背景做出最终判断。
maxhub传屏软件
GC9D01_Rotation.h
物联网_蓝牙50_BLE低功耗通信_基于ESP32芯片的智能家居设备无线控制系统_实现多设备互联与远程监控的跨平台解决方案_包含Android和iOS移动端应用开发_支持MQTT
iOS开发_AVFoundation框架_Swift编程语言_本地音频播放_网络音频流媒体_后台播放功能_耳机线控支持_UI界面设计_音乐播放器Demo_项目结构优化_错误处理机制
内容概要:本文详细介绍了如何使用MATLAB实现决策树回归模型,具体步骤包括数据读取、数据预处理、模型训练、预测与评估以及结果可视化。文中提供了完整的代码示例,并针对每个步骤给出了详细的注释和解释,确保读者能够轻松理解和上手。此外,还讨论了决策树回归模型的优点和局限性,如解释性强但易过拟合的问题,并给出了一些优化建议。 适合人群:具备基本编程技能并对机器学习感兴趣的初学者,尤其是希望通过MATLAB快速入门决策树回归模型的人。 使用场景及目标:适用于需要进行回归预测的实际项目,如房价预测、温度预测等。通过学习本文,读者可以掌握如何利用MATLAB实现决策树回归模型,理解模型的工作原理及其应用场景。 其他说明:文中强调了代码实现过程中的一些注意事项,如数据格式、路径设置等,并提供了一些常见的解决方案和优化技巧,帮助读者更好地应对实际问题。
chromedriver-win64-138.0.7158.0.zip
内容概要:本文详细介绍了基于储能电站服务的冷热电多微网系统的双层优化配置方法及其MATLAB代码实现。文章首先阐述了冷热电多微网系统的重要性和储能电站在其中的关键作用,随后讲解了双层优化配置的概念,即上层优化关注系统宏观目标(如成本最小化、能源利用率最大化),下层优化侧重于各微网系统的具体运行情况。文中提供了具体的MATLAB代码示例,包括上层和下层优化的实现方式,并通过实例展示了如何使用CPLEX求解器进行优化。此外,文章还探讨了模型的实际应用效果,指出相比于传统单层优化,双层优化能够使系统运行成本降低15%-20%,特别是在储能的削峰填谷方面表现出色。最后,作者分享了一些调试经验和实用技巧,如延迟约束生成、结构化数据管理和迭代过程中的收敛判断等。 适用人群:从事能源系统优化的研究人员和技术人员,尤其是对MATLAB和CPLEX有一定了解的读者。 使用场景及目标:适用于需要对冷热电多微网系统进行优化配置的工程项目,旨在通过合理的储能电站配置和调度策略,实现能源利用效率的最大化和系统运行成本的最小化。 其他说明:文章不仅提供了理论指导,还附带了详细的代码实现,便于读者理解和实践。对于初学者而言,建议逐步学习并调试代码,掌握双层优化配置的核心思想和关键技术。
内容概要:本文深入解析了三菱FX5U PLC七轴控制系统的标准程序,涵盖主控程序、点动/回零/定位控制、手动模块、复位程序以及生产计数模块。主控程序利用状态寄存器进行模式切换,确保各模块独立运作;点动模式通过PLSY指令控制电机正反转,绝对定位采用DRVA指令,回零则使用ZRN指令;手动模块加入双线圈互锁设计防止误操作;复位程序包含状态检测,确保安全复位;生产计数模块通过上升沿触发避免计数异常。此外,文章还介绍了触摸屏程序的设计要点和调试过程中的一些常见问题及其解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对三菱PLC编程有一定基础的人群。 使用场景及目标:适用于需要理解和掌握三菱FX5U PLC七轴控制系统的设计和调试的技术人员。主要目标是帮助读者理解各个功能模块的工作原理,提高编程效率和系统稳定性。 其他说明:文中提供了大量实际应用中的经验和技巧,有助于读者在实际工作中避免常见的错误,提升工作效率。
985研究生,Matlab领域优质创作者 (1)如需代码 加腾讯企鹅号,见评论区或私信; (2)代码运行版本 Matlab 2019b (3)其他仿真咨询 1 完整代码包运行+运行有问题可咨询 2 期刊或论文复现; 3 程序定制; 4 期刊写作或指导; 5 科研合作;
# 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
detection method(1)(1)(1) (1)