通常当系统发生故障时,工程师需要登录到各个服务器上,使用 grep / sed / awk 等 Linux 脚本工具去日志里查找故障原因。在没有日志系统的情况下,首先需要定位处理请求的服务器,如果这台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志压缩归档策略等。
The Scalable Time Series Database. 打开OpenTSDB官网,第一眼看到的就是这句话。其将Scalable作为其重要的特点。OpenTSDB运行在Hadoop和HBase上,其充分利用HBase的特性。通过独立的Time Series Demon(TSD)提供服务,所以它可以通过增减服务节点来轻松扩缩容。
color = ['red', 'pink','orange','gray'] fig, axi1=plt.subplots(1) for i in range(4): axi1.scatter(X[y==i, 0], X[y==i,1], marker='o', s=8, c=color[i] ) plt.show()
8,K-means聚类之一:k=3
使用sklearn的KMeans模块进行聚类分析,可以设置要聚几类。
此处k设置为3
1
from sklearn.cluster import KMeans n_clusters=3 cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)
9,查看聚类后的质心
k=3的情况下,会有3个质心
1
centroid=cluster.cluster_centers_ centroid
输出结果:
array([[-8.09286791, -3.50997357],
[-1.54234022, 4.43517599],
[-7.0877462 , -8.08923534]])
10,使用matplotlib画图
使用matplotlib.pyplot画出聚类后的图像
1
y_pred = cluster.labels_#获取训练后对象的每个样本的标签 centtrod = cluster.cluster_centers_ color=['red','pink','orange','gray'] fig, axi1=plt.subplots(1) for i in range(n_clusters): axi1.scatter(X[y_pred==i, 0], X[y_pred==i, 1], marker='o', s=8, c=color[i]) axi1.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black')
public interface IUnitOfWorks<TContext> {bool IsCommit { get; set; }void SetDb(TContext context);IQueryable<T> All<T>() where T : class;IQueryable<T> Where<T>(Expression<Func<T, bool>> whereLambda) where T : class;int Count<T>() where T : class;int Count<T>(Expression<Func<T, bool>> whereLambda) where T : class;int Add<T>(T model) where T : class;int Update<T>(T model) where T : class;int Update<T>(T model, params string[] proName) where T : class;int Delete<T>(T model) where T : class;int Delete<T>(Expression<Func<T, bool>> whereLambda) where T : class;int SaveChanges(bool validatonSave = true);void Dispose(); }
public class UnitOfWorks<TContext> : IUnitOfWorks<TContext>where TContext : DbContext {protected TContext dbContext;protected bool _IsCommit=false;public bool IsCommit { get { return _IsCommit; } set { _IsCommit = value; } }public UnitOfWorks() { dbContext = (TContext)EFContextFactory.GetDbContext(); }public void SetDb(TContext context) { dbContext = context; }private IDictionary<Type, object> RepositoryDic = new Dictionary<Type, object>();protected IRepository<T> GenericRepository<T>() where T : class {return new Repository<DbContext, T>(dbContext); }public IRepository<T> GetRepository<T>()where T : class { IRepository<T> repository = null;var key = typeof(T);if (RepositoryDic.ContainsKey(key)) { repository = (IRepository<T>)RepositoryDic[key]; }else { repository = GenericRepository<T>(); RepositoryDic.Add(key, repository); }return repository; }public IQueryable<T> All<T>() where T : class {return GetRepository<T>().All(); }public IQueryable<T> Where<T>(Expression<Func<T, bool>> whereLambda) where T : class {return GetRepository<T>().Where(whereLambda); }public int Count<T>() where T : class {return GetRepository<T>().Count(); }public int Count<T>(Expression<Func<T, bool>> whereLambda) where T : class {return GetRepository<T>().Count(whereLambda); }public int Add<T>(T model) where T : class {return GetRepository<T>().Add(model, IsCommit); }public int Update<T>(T model) where T : class {return GetRepository<T>().Update(model, IsCommit); }public int Update<T>(T model, params string[] proName) where T : class {return GetRepository<T>().Update(model,IsCommit, proName); }public int Delete<T>(T model) where T : class {return GetRepository<T>().Delete(model, IsCommit); }public int Delete<T>(Expression<Func<T, bool>> whereLambda) where T : class {return GetRepository<T>().Delete(whereLambda, IsCommit); }public int SaveChanges(bool validatonSave = true) {if (!validatonSave) dbContext.Configuration.ValidateOnSaveEnabled = false;return dbContext.SaveChanges(); }public void Dispose() {if (dbContext != null) dbContext.Dispose(); GC.SuppressFinalize(this); } }
TINYINT(4),这个括号里面的数值并不是表示使用多大空间存储,而是最大显示宽度,并且只有字段指定zerofill时有用,没有zerofill,(m)就是无用的,例如id BIGINT ZEROFILL NOT NULL,所以建表时就使用默认就好了,不需要加括号了,除非有特殊需求,例如TINYINT(1)代表boolean类型。
• 能够快速缩小结果集的 WHERE 条件写在前面,如果有恒量条 件,也尽量放在前面 ,例如 where 1=1 • 避免使用 GROUP BY、DISTINCT 等语句的使用,避免联表查 询和子查询 • 能够使用索引的字段尽量进行有效的合理排列 • 针对索引字段使用 >, >=, =, <, <=, IF NULL 和 BETWEEN 将会 使用索引,如果对某个索引字段进行 LIKE 查询,使用 LIKE ‘%abc%’ 不能使用索引,使用 LIKE ‘abc%’ 将能够使用索引 • 如果在 SQL 里使用了 MySQL部分自带函数,索引将失效 • 避免直接使用 select *,只取需要的字段,增加使用覆盖索引使用的可能 • 对于大数据量的查询,尽量避免在 SQL 语句中使用 order by 字 句 • 连表查询的情况下,要确保关联条件的数据类型一致,避免嵌 套子查询 • 对于连续的数值,使用 between 代替 in • where 语句中尽量不要使用 CASE 条件 • 当只要一行数据时使用 LIMIT 1
例子
1 2 3 4 5 6 7 8 9
CREATE TABLE `health_package` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '序号', `package_id` int unsigned NOT NULL COMMENT '套系 id', `module_id` int unsigned NOT NULL COMMENT '模块 id', `is_delete` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '是否删除,0-未删除,1-删除,默认为0', `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Create time, common column by DB rules', `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Modified time,common column by DB rules ', PRIMARY KEY (`id`) ) COMMENT='This table stores module and package of health for ...';
var oLamadaExtention = new LambdaExpression(); var left = oLamadaExtention.GetProperty(null, Expression.Parameter(typeof(Order), “x”), “Product.Categary.Type”); var value = Expression.Constant(“1”, left.Type); //动态转换类型 var right = Expression.Constant(value, left.Type); Expression expRes = Expression.Equal(left, right);