SqlSugar:
(1)创建对象:
//创建SqlSugarClient对象
var db = new SqlSugarClient(xxx);
var sdb = new SimpleClient<Student>(db);
var student2 = sdb.GetById(1);
var isDel=sdb.DeleteById(1);
(2)继承扩展:
//可以直接用SimpleClient也可以扩展一个自个的类 推荐直接用 SimpleClient
public class DbSet<T>:SimpleClient<T> where T : class , new ()
{
public DbSet(SqlSugarClient context): base (context)
{
}
//SimpleClient中的方法满足不了你,你可以扩展自已的方法
public List<T> GetByIds(dynamic [] ids)
{
return Context.Queryable<T>().In(ids).ToList(); ;
}
}
//创建一个DbContext类,使用DbSet(或者SimpleClient)
public class DbContext
{
public DbContext()
{
Db = new SqlSugarClient( new ConnectionConfig()
{
ConnectionString = "xx" ,
DbType = DbType.SqlServer,
IsAutoCloseConnection = true
});
}
public SqlSugarClient Db; //用来处理事务多表查询和复杂的操作
public DbSet<Student> StudentDb { get { return new DbSet<Student>(Db); } } //用来处理Student表的常用操作
public DbSet<School> SchoolDb { get { return new DbSet<School>(Db); } } //用来处理School表的常用操作
}
(3)使用DbContext
//用db完成复杂的工作
List<Student> list2=StudentDb.GetList(); //使用 StudentDb查询
//使用db处理事务
Db.Ado.UseTran(() =>
{
var s= SchoolDb.GetById(1); //使用SchoolDb查询一条记录
});
//使用db多表查询
var viewList= Db
.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id)
.Select((st, sc) => new { st, sc })
.ToList();
点聚合抽稀方法:
(1)kmeans
a)性能问题
kmeans是计算密集型算法,需要迭代多次才能完成,而且每次迭代过程中都涉及到复杂的距离计算,比较消耗cpu。
我们在上线后遇到load较高的问题。
b)效果问题
kmeans未能彻底解决重叠覆盖问题!可以看到有些聚合后的图标会叠合在一起。
(2)网格距离法
1)将各个点落到相应正方形内;2)求解各个网格的质心;3)合并质心:判断各个质心是否在某一范围内,如果在某一范围内则进行合并。
(3)直接距离法
初始时没有任何已知聚合点,然后对每个点进行迭代,计算一个点的外包正方形,若此点的外包正方形与现有的聚合点的外包正方形不相交,则新建聚合点(这里不是计算点与点间的距离,而是计算一个点的外包正方形,正方形的边长由用户指定或程序设置一个默认值),若相交,则把该点聚合到该聚合点中,若点与多个已知的聚合点的外包正方形相交,则计算该点到到聚合点的距离,聚合到距离最近的聚合点中,如此循环,直到所有点都遍历完毕。每个缩放级别都重新遍历所有原始点要素。