java的代码就不说了,毕竟不是我的主业。

1.c#数据库连接池Hikari.

(1)动态加载各类数据库驱动

(2)支持简单配置文件

(3)支持按照名称多数据库调用

(4)使用简洁

单数据库使用:

HikariConfig hikariConfig = new HikariConfig();
hikariConfig.LoadConfig("Hikari.txt");
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);

获取连接:

hikariDataSource.GetConnection();

连接池管理类获取

ManagerPool.Instance.GetDbConnection(MySql);

项目地址:

https://github.com/jinyuttt/Hikari.git

2.c#数据库封装DBQuerySharp

(1)各类数据库均有,功能齐备

(2)有SQL,NoSQL样例,完善了封装

(3)封装成了服务化模型。扩展使用和优化

(4)有查询的缓存优化样例。

整个包括了SQL数据库(连接池任意配置),本地KV数据库(berkeleydb),本地SQL数据库(Sqlite),内存SQL数据库(Sqlite),内存NOSQL数据库(redis),内存KV存储(LRU缓存)

(5)相关项目

1.sqilte 2.berkeleydb 3.一般数据库使用(通过Hikari) 4.redis   包含其他项目: 1.序列化 2.通信 3.自定义数据库连接池

项目地址:

https://github.com/jinyuttt/DBQuerySharp.git

3.本地缓存JYCache

(1)完全本地换K-V缓存

(2)实现FIFO,LRU,LFU策略

使用示例:

CacheConfig config = new CacheConfig();

config.CacheTime = 1800;//(时间都是秒)

config.Policy = CachePolicy.FIFO;//设置消失策略

ICache<int,int> cache=CacheFactory<int, int>.Create(config);

cache.CacheRemoveListener += Cache_CacheRemoveListener;

cache.Add(1, 1,10);//单独设置key保持10秒

项目地址:

https://github.com/jinyuttt/JYCache.git

4.Hash一直负载均衡LoadBalanceHash

(1)实现Hash一致算法。算法原理网上搜索很多,我就不说了。只需要搜索“Hash一致”

(2)这方面我不擅长,主要是参阅网友的东西。我的封装包括了2个项目。一个是网上原理KetamaHash .

(3)主要参阅:https://www.cnblogs.com/daizhj/archive/2010/08/24/1807324.html

https://blog.csdn.net/cywosp/article/details/23397179/

(4)代码说明

参考网上的代码就不说了,一模一样。主要是MD5+SortedList.

这里说我测试的另外一个组合。MurmurHash+SortedList.这个是充分验证了效率的。

MurmurHash算法比较快,网上多少MD5.用法基本可以一样,但是我没有使用原来进行分组了。底层存储我测试了SortedDictionary,SortedList以及自定义红黑树(gi网友的,可以使用)。他们的主要问题都是在获取Key右侧最近的节点。都没有提供现成的。所以测试很慢。

最后测试MurmurHash+SortedList.但是多了一层封装。我将其SortedList与红黑树合并(也可以直接自己封装一个类结构,项目中也有样例)。在初始化时,数据添加到红黑树中。然后通过UpdateSort快速遍历,将数据导入SortedList存储使用,这样就启用了其中为Hash一致封装的功能TialNode.但是这里不能使用网上的方法,用linq查询,太慢。我在内部直接使用二分法进行搜索。后面说原因。采用这种办法会很快,而且直接返回最右侧的一个值。这里强调一个问题,不能使用多线程分片查询,更加慢。经过测试,每个线程都是一样的时间,和应该线程直接查询一样的时间使用。都是很短的时间大约一个线程30-800(比毫秒还小的那个单位)。我测试使用的分片方法任然在,但是不能使用。这个可能和数据量有关,一个线程的数据量没有千万级就不要测试了,二分法的方法已经够快了,一次干掉一般的数据,没有几次就结束了。

最后说说碰上的一个小问题:比较SortedDictionary, SortedList。我推荐一篇文章,是我自己查阅源码(net core)之后,认为这篇文章是真实的。博文地址:https://blog.csdn.net/ma_jiang/article/details/78600043。我比较认可。也正是由于2者的结构,所以我最后采用SortedList来实现Hash一致。

关于这个问题说2点:SortedList内存小,而且是线性数组实现的Key与value。SortedDictionary则是二叉树。查询一个是二分法,一个是二叉树。另外一个困惑是,我采用红黑树搜索居然达不到它们2者的速度,我感觉奇怪。后面我再继续测试吧。

项目地址:

https://github.com/jinyuttt/LoadBalanceHash.git

c#总结最近的几项重要代码的更多相关文章

  1. 详解Top命令 输出命令行选项及代码

    Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服务器的负载.在本篇中,我们会探索top命令的细节.top命令是一个交互命令.在运行top的时候还可以运 ...

  2. 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定

    最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...

  3. TFS代码变更和工作项关联,为系统变更提供完美的跟踪轨迹

    TFS是微软的应用软件生命周期管理(ALM)的解决方案产品,相比我们常见的一些ALM产品,例如HP ALM, IBM Rational, Atlanssian Jira等,其最大的区别在于TFS将软件 ...

  4. C#程序员经常用到的10个实用代码片段

    1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine(“Platform: {}”, ...

  5. C#程序开发中经常遇到的10条实用的代码

    1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: ...

  6. C#常用代码集合(1)

    引用自james li的博客,地址:http://www.cnblogs.com/JamesLi2015/p/3147986.html   1 读取操作系统和CLR的版本   OperatingSys ...

  7. DotNetBar RibbonControl 控件动态添加项

    想做个插件式开发,界面用Dotnetbar的RibbonControl,需要通过代码动态的向RibbonControl控件添加项 示例代码如下: RibbonTabItem rti = new Rib ...

  8. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  9. ActionBar官方教程(8)ShareActionProvider与自定义操作项提供器

    Adding an Action Provider Similar to an action view, an action provider replaces an action button wi ...

随机推荐

  1. 安装VS2013时,如何避开IE10的限制

    安装VS2013时,如何避开IE10的限制 VS就会告诉我们目前环境不适合安装VS2013,必须升级IE版本到IE10. 如果不想安装IE10,有没有办法呢? 答案肯定是有的. 将下面一段文字,储存为 ...

  2. vue中子组件的拆分 父组件与子组件之间的传值

    vue是组件式开发,尽量独立出子组件 prop():父组件传值给子组件 $emit():子组件传值给父组件 子组件中的设置: 使用bind <template> : default-che ...

  3. 软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transf ...

  4. Node 的fs模块

    这个fs.readdir路径要加上__dirname  找到绝对路径  否则会报错 { Error: ENOENT: no such file or directory, scandir '/User ...

  5. Ubuntu16.04安装Docker1.12+开发实例+hello world+web应用容器

    本次主要是详细记录Docker1.12在Ubuntu16.04上的安装过程,创建Docker组(避免每次敲命令都需要sudo),Docker常用的基本命令的总结,在容器中运行Hello world,以 ...

  6. Java NIO(二) Channel

    Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. 通道可以异步地读写. 通道中的数据总是要先读到一个Buffer,或者总是要从一个Bu ...

  7. 给Sublime text 3增加选中当前单词快捷键

    1.录制一份macro caret on a word –> ctrl+left –> ctrl+shift+right 2.将录制好的macro保存为select_current_wor ...

  8. SSH 学习记录及在SSH模式下使用XShell连接服务器

    传统的网络服务程序,如rsh.FTP.POP和Telnet其本质上都是不安全的:因为它们在网络上用明文传送数据.用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击 ...

  9. Centos6.5(Linux)安装Nginx

    1.安装nginx依赖的库pcre       下载地址:http://sourceforge.net/projects/pcre/    2.解压pcre        zip解压方式:unzip ...

  10. Gym Gym 101147G 第二类斯特林数

    题目链接:http://codeforces.com/gym/101147/problem/G 题意:n个人,去参加k个游戏,k个游戏必须非空,有多少种放法? 分析: 第二类斯特林数,划分好k个集合后 ...