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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3