Floodlight源码阅读之内存数据库

2024-05-10 18:18

本文主要是介绍Floodlight源码阅读之内存数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内存数据库的种类有很多,基于java数据结构就可以实现一个内存数据库,Floodlight里面的网络设备和拓扑结构就保存在写内存数据库中首先看

内存表MemoryTable


这个类主要的代码是

    private String tableName;private Map<Object,Map<String,Object>> rowMap;private int nextId;MemoryTable(String tableName) {this.tableName = tableName;rowMap = new TreeMap<Object,Map<String,Object>>();nextId = 0;}
通过Map<Object,Map<String,Object>>这个TreeMap保存行信息,nextid相当于自增主键。
插入删除行也非常简单

    void insertRow(Object key, Map<String,Object> rowValues) {assert(key != null);rowMap.put(key, rowValues);}void deleteRow(Object rowKey) {rowMap.remove(rowKey);}
ok看完了基本数据库model要看这个数据库怎么用了。

MemoryStorageSource这个类使用刚才定义的table,首先看insert方法

    @Overrideprotected void insertRows(String tableName, List<Map<String,Object>> insertRowList) {MemoryTable table = getTable(tableName, false);String primaryKeyName = getTablePrimaryKeyName(tableName);synchronized (table) {for (Map<String,Object> row : insertRowList) {Object primaryKey = row.get(primaryKeyName);if (primaryKey == null) {if (primaryKeyName.equals(DEFAULT_PRIMARY_KEY_NAME)) {row = new HashMap<String,Object>(row);primaryKey = table.getNextId();row.put(primaryKeyName, primaryKey);}}table.insertRow(primaryKey, row);}}}

这个方法指定table的名称和行的list集合。通过for循环插入行,每行都是一个map,如果主键id是空的话就自增,如果不是空就直接插入即可。

有插入的方法自然就有对应删除方法

  @Overrideprotected void deleteRowsImpl(String tableName, Set<Object> rowKeys) {MemoryTable table = getTable(tableName, false);synchronized (table) {for (Object rowKey : rowKeys) {table.deleteRow(rowKey);}}}

查询获取一行的方法

    @Overrideprotected Map<String,Object> getRow(String tableName, String[] columnNameList, Object rowKey) {MemoryTable table = getTable(tableName, false);return table.getRow(rowKey);}

这样一个简单的内存数据就完成了







这篇关于Floodlight源码阅读之内存数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977191

相关文章

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.