首页 开发编程 正文

php单点怎么登录

Java软件工程师一般月薪范围在4000-10000元,有一年工作经验的Java高级软件工程师的薪酬大致在年薪10—13万左右。java技术培训之后可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作,我们生活中好多所熟知的吃鸡、王者荣耀、LOL、淘宝、京东、外卖平台都是通...

php单点怎么登录,java的就业方向有哪些?

JAVA就业方向:

刚就业的话可以做初级开发工程师,往上走就是中级高级工程师,需求工程师等。或者是成为管理人员,例如产品研发经理,技术经理,项目经理等。

这是一张职业发展生涯图,希望能帮到楼主。

根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%。同时,Java工程师的薪水相对较高。 Java软件工程师一般月薪范围在4000-10000元,远远超过了应届毕业生月薪2500元的平均水平。

通常来说,有一年工作经验的Java高级软件工程师的薪酬大致在年薪10—13万左右。

java技术培训之后可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作,就业面非常广。

我们生活中好多所熟知的吃鸡、王者荣耀、LOL、淘宝、京东、外卖平台都是通过Java开发的,这也就涵盖了Java网站开发、游戏开发,方方面面都很广泛的!

分享我的自学线路图,希望能帮到大家:

此套视频分六大阶段,每一阶段都逐渐加深,此套教程已经整理的非常完善,各位学习者基本上按照此套流程,一阶段,一阶段学习来,肯定会入门,逆袭成为大牛。

第一阶段:

Java基础视频教程

1、毕向东老师的java入门教程

2、小白的福音java入门教程

3、java快速入门教程

此三个教程异曲同工,内容知识点相差不大,可以只学习其中一个哦!

第二大阶段:

Java教程

(1)轻松掌握JavaWeb视频教程

(2)6天玩转mysql视频教程

(3)超全面的JavaWeb视频教程

(4)阶段案例--JavaWeb网上图书商城完整

第三大阶段:

Java教程

(1)Hibernate5框架

(2)Struts2框架

(3)Spring框架

Spring2.5视频教程

第四大阶段:

知识点:

Java教程

(1)ORACLE经典视频教程

(2)Maven精品教程

第五大阶段:

Java教程推荐:

(1) Springmvc由浅入深全套视频教程

(2)Mybatis由浅入深全套视频教程

第六大阶段:

Java教程推荐:

(1)Java学科巴巴运动网视频教程106集

(2)巴巴运动网续集视频教程

具体配套视频有需要的小伙伴可以私信我,码字不易,有用请点赞分享一下吧!

Java开发分库分表需要解决的问题及mycat是怎样实现分库分表的?

MySQL的使用场景中,读写分离只是方案中的一部分,想要扩展,势必会用到分库分表,可喜的是Mycat里已经做到了,今天花时间测试了一下,感觉还不错。

关于分库分表

当然自己也理了一下,分库分表的这些内容,如果分成几个策略或者阶段,大概有下面的几种。

最上面的第一种是直接拆表,比如数据库db1下面有test1,test2,test3三个表,通过中间件看到的还是表test,里面的数据做了这样的拆分,能够在一定程度上分解压力,如果细细品来,和分区表的套路有些像。

接下来的几类也是不断完善,把表test拆解到多个库中,多个服务器中,如果做了读写分离,全套的方案这样的拆解改进还是很大的。如此来看,数据库中间件做了很多应用和数据库之间的很多事情,能够流行起来除了技术原因还是有很多其他的因素。

分库分表的测试环境模拟

如果要在一台服务器上测试分库分表,而且要求架构方案要全面,作为技术可行性的一个判定参考,是否可以实现呢。

如果模拟一主两从的架构,模拟服务分布在3台服务器上,这样的方案需要创建9个实例,每个实例上有3个db需要分别拆分。

大体的配置如下:

master1: 端口33091

(m1)slave1: 端口33092

(m1)slave2: 端口33093

master2: 端口33071

(m2)slave1: 端口33072

(m2)slave2: 端口33073

master3: 端口33061

(m3)slave1: 端口33062

(m3)slave2: 端口33063

画个图来说明一下,其中db1,db2,db3下面有若干表,需要做sharding

所以我们需要模拟的就是这个事情。

使用Mycat碰到的几个小问题解惑

使用Mycat的时候碰到了几个小问题,感觉比较有代表性,记录了一下。

问题1:

首先是使用Mycat连接到数据库之后,如果不切换到具体的数据库下,使用[数据库名].[表名]的方式会抛出下面的错误,可见整个过程中,Mycat拦截了SQL信息做了过滤,在转换的时候找不到目标路由。当然实际使用中,规范使用肯定不会有这个问题。

mysql> select * from db1.shard_auto;

ERROR 1064 (HY000): find no Route:select * from db1.shard_auto

问题2:

在配置了sharding策略之后,insert语句抛出了下面的错误,这个是对语法的一个基本的要求。

mysql> insert into shard_mod_long values(1,'aa',date);

ERROR 1064 (HY000): partition table, insert must provide ColumnList

问题3:

如果sharding策略配置有误,很可能出现表访问正常,但是DML会有问题,提示数据冲突了。至于如何配置sharding,下面会讲。

mysql> select * from shard_mod_long;

Empty set (0.00 sec)

mysql> insert into shard_mod_long(ID,name,shard_date) values(1,'aa',current_date);

ERROR 1105 (HY000): Duplicate entry '1' for key 'PRIMARY'

问题4:

如果sharding的配置有误,很可能出现多份冗余数据。

查看执行计划就一目了然,通过data_node可以看到数据指向了多个目标库。

mysql> explain insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date);

+-----------+------------------------------------------------+

| DATA_NODE | SQL |

+-----------+------------------------------------------------+

| pxcNode11 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |

| pxcNode21 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |

| pxcNode31 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |

+-----------+------------------------------------------------+

这种情况如果有一定的需求还是蛮不错的,做sharding可惜了。问题就在于下面的这个table配置。

<table name="shard_auto" primaryKey="ID" type="global" dataNode="pxcNode11,pxcNode21,pxcNode31" rule="auto-sharding-long" />

需要去掉 type="global"的属性,让它sharding。

Mycat里面的sharding策略

Mycat的分片策略很丰富,这个是超出自己的预期的,也是Mycat的一大亮点。

大体分片规则如下,另外还有一些其他分片方式这里不全部列举:

(1)分片枚举:sharding-by-intfile

(2)主键范围:auto-sharding-long

(3)一致性hash:sharding-by-murmur

(4)字符串hash解析:sharding-by-stringhash

(5)按日期(天)分片:sharding-by-date

(6)按单月小时拆分:sharding-by-hour

(7)自然月分片:sharding-by-month

在开始之前,我们要创建下面的表来模拟几个sharding的场景,表名根据需求可以改变。

create table shard_test(ID int primary key, name varchar(20),shard_date date);

主键范围分片

主键范围分片是参考了主键值,按照主键值的分布来分布数据库在不同的库中,我们先在对应的sharding节点上创建同样的表结构。

关于sharding的策略,需要修改rule.xml文件。

常用的sharding策略已经在Mycat里面实现了,如果要自行实现也可以定制。比如下面的规则,是基于主键字段ID来做sharding,分布的算法是rang-long,引用了function rang-long,这个function是在对应的一个Java类中实现的。

<tableRule name="auto-sharding-long">

<rule>

<columns>ID</columns>

<algorithm>rang-long</algorithm>

</rule>

<function name="rang-long"

class="io.mycat.route.function.AutoPartitionByLong">

<property name="mapFile">autopartition-long.txt</property>

当然主键的范围是不固定的,可以根据需求来定制,比如按照一百万为单位,或者1000位单位,文件是 autopartition-long.txt 文件的内容默认如下,模板里是分为了3个分片,如果要定制更多的就需要继续配置了,目前来看这个配置只能够承载15亿的数据量,可以根据需求继续扩展定制。

# range start-end ,data node index

# K=1000,M=10000.

0-500M=0

500M-1000M=1

1000M-1500M=2

插入一些数据来验证一下,我们可以查看执行计划来做基本的验证,配置无误,数据就根据规则流向了指定的数据库下的表里。

mysql> explain insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date);

+-----------+------------------------------------------------+

| DATA_NODE | SQL |

+-----------+------------------------------------------------+

| pxcNode11 | insert into shard_auto(ID,name,shard_date) values(1,'aa',current_date) |

+-----------+------------------------------------------------+

还有一个查看sharding效果的小方法,比如我插入一个极大的值,保证和其他数据不在一个分片上,我们运行查询语句两次,结果会有点变化。

sharing的效果

mysql> select * from shard_auto;

+---------+------+------------+

| ID | name | shard_date |

+---------+------+------------+

| 1 | aa | 2017-09-06 |

| 2 | bb | 2017-09-06 |

| 5000001 | aa | 2017-09-06 |

+---------+------+------------+

3 rows in set (0.00 sec)

稍作停顿,继续运行。

mysql> select * from shard_auto;

+---------+------+------------+

| ID | name | shard_date |

+---------+------+------------+

| 5000001 | aa | 2017-09-06 |

| 1 | aa | 2017-09-06 |

| 2 | bb | 2017-09-06 |

+---------+------+------------+

3 rows in set (0.01 sec)

Hash分片

Hash分片其实企业级应用尤其广泛,我觉得一个原因是通过这种数据路由的方式,得到的数据情况是基本可控的,和业务的关联起来比较直接。很多拆分方法都是根据mod方法来平均分布数据。

sharding的策略在rule.xml里面配置,还是默认的mod-long规则,引用了算法mod-long,这里是根据sharding的节点数来做的,默认是3个。

<tableRule name="mod-long">

<rule>

<columns>id</columns>

<algorithm>mod-long</algorithm>

</rule>

</tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">

<!-how many data nodes -->

<property name="count">3</property>

</function>

比如查看两次insert的结果情况。

mysql> explain insert into shard_mod_long(ID,name,shard_date) values(4,'dd',current_date);

+-----------+------------------------------------------------+

| DATA_NODE | SQL |

+-----------+------------------------------------------------+

| pxcNode22 | insert into shard_mod_long(ID,name,shard_date) values(4,'dd',current_date) |

+-----------+------------------------------------------------+

mysql> explain insert into shard_mod_long(ID,name,shard_date) values(5,'ee',current_date);

+-----------+------------------------------------------------+

| DATA_NODE | SQL |

+-----------+------------------------------------------------+

| pxcNode23 | insert into shard_mod_long(ID,name,shard_date) values(5,'ee',current_date) |

+-----------+------------------------------------------------+

可以看到数据还是遵循了节点的规律,平均分布。

至于schema.xml的配置,是整个分库的核心,我索性也给出一个配置来,供参考。

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<!-定义MyCat的逻辑库 -->

<schema name="db1" checkSQLschema="false" sqlMaxLimit="100" >

<table name="shard_mod_long" primaryKey="ID" type="global" dataNode="pxcNode11,pxcNode21,pxcNode31" rule="mod-long" />

<table name="shard_auto" primaryKey="ID" type="global" dataNode="pxcNode11,pxcNode21,pxcNode31" rule="auto-sharding-long" />

</schema>

<!-定义MyCat的数据节点 -->

<dataNode name="pxcNode11" dataHost="dtHost" database="db1" />

<dataNode name="pxcNode21" dataHost="dtHost2" database="db1" />

<dataNode name="pxcNode31" dataHost="dtHost3" database="db1" />

<!-定义数据主机dtHost,连接到MySQL读写分离集群 ,schema中的每一个dataHost中的host属性值必须唯一-->

<!-dataHost实际上配置就是后台的数据库集群,一个datahost代表一个数据库集群 -->

<!-balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡-->

<!-writeType="0",所有写操作发送到配置的第一个writeHost,这里就是我们的hostmaster,第一个挂了切到还生存的第二个writeHost-->

<dataHost name="dtHost" maxCon="500" minCon="20" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<!--心跳检测 -->

<heartbeat>show slave status</heartbeat>

<!--配置后台数据库的IP地址和端口号,还有账号密码 -->

<writeHost host="hostMaster" url="192.168.163.128:33091" user="mycat_user" password="mycat" />

</dataHost>

<dataHost name="dtHost2" maxCon="500" minCon="20" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<!--心跳检测 -->

<heartbeat>show slave status</heartbeat>

<!--配置后台数据库的IP地址和端口号,还有账号密码 -->

<writeHost host="hostMaster" url="192.168.163.128:33071" user="mycat_user" password="mycat" />

</dataHost>

<dataHost name="dtHost3" maxCon="500" minCon="20" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<!--心跳检测 -->

<heartbeat>show slave status</heartbeat>

<!--配置后台数据库的IP地址和端口号,还有账号密码 -->

<writeHost host="hostMaster" url="192.168.163.128:33061" user="mycat_user" password="mycat" />

</dataHost>

</mycat:schema>

=================================================================================================

用Mycat,学会数据库读写分离、分表分库

php疑难杂症铺 2017-09-13 14:31

用Mycat,学会数据库读写分离、分表分库

系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。希望通过这篇文章的介绍,能学会Mycat的使用。

安装

Mycat官网:http://www.mycat.io/

可以了解下Mycat的背景和应用情况,这样使用起来比较有信心。

Mycat下载地址:http://dl.mycat.io/

官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。

下载:

建议大家选择 1.6-RELEASE 版本,毕竟是比较稳定的版本。

安装:

根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试,这个赞一下。)

Mycat的安装其实只要解压下载的目录就可以了,非常简单。

安装完成后,目录如下:

目录说明binmycat命令,启动、重启、停止等catletcatlet为Mycat的一个扩展功能confMycat 配置信息,重点关注libMycat引用的jar包,Mycat是java开发的logs日志文件,包括Mycat启动的日志和运行的日志。

配置

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

文件说明server.xmlMycat的配置文件,设置账号、参数等schema.xmlMycat对应的物理数据库和数据库表的配置rule.xmlMycat分片(分库分表)规则

Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。

我们现在做一个主从、读写分离,简单分表的示例。结构如下图:

服务器IP说明Mycat192.168.0.2mycat服务器,连接数据库时,连接此服务器database1192.168.0.3物理数据库1,真正存储数据的数据库database2192.168.0.4物理数据库2,真正存储数据的数据库

Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,连接数据库是不变的,默认端口是8066。连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/

server.xml

示例

重点关注下面这段,其他默认即可。

参数说明user用户配置节点--name登录的用户名,也就是连接Mycat的用户名--password登录的密码,也就是连接Mycat的密码--schemas数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs--privileges配置用户针对表的增删改查的权限,具体见文档吧

我这里配置了一个账号test 密码也是test,针对数据库lunch,读写权限都有,没有针对表做任何特殊的权限。

schema.xml

schema.xml是最主要的配置项,首先看我的配置文件。

参数说明schema数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应dataNode分片信息,也就是分库相关配置dataHost物理数据库,真正存储数据的数据库

每个节点的属性逐一说明:

schema:

属性说明name逻辑数据库名,与server.xml中的schema对应checkSQLschema数据库前缀相关设置,建议看文档,这里暂时设为folsesqlMaxLimitselect 时默认的limit,避免查询全表

table:

属性说明name表名,物理数据库中表名dataNode表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的nameprimaryKey主键字段名,自动生成主键时需要设置autoIncrement是否自增rule分片规则名,具体规则下文rule详细介绍

dataNode

属性说明name节点名,与table中dataNode对应datahost物理数据库名,与datahost中name对应database物理数据库中数据库名

dataHost

属性说明name物理数据库名,与dataNode中dataHost对应balance均衡负载的方式writeType写入方式dbType数据库类型heartbeat心跳检测语句,注意语句结尾的分号要加。

应用场景

数据库分表分库

配置如下:

我在192.168.0.2、192.168.0.3均有数据库lunch。

lunchmenu、restaurant、userlunch、users这些表都只写入节点dn1,也就是192.168.0.2这个服务,而dictionary写入了dn1、dn2两个节点,也就是192.168.0.2、192.168.0.3这两台服务器。分片的规则为:mod-long。

主要关注rule属性,rule属性的内容来源于rule.xml这个文件,Mycat支持10种分表分库的规则,基本能满足你所需要的要求,这个必须赞一个,其他数据库中间件好像都没有这么多。

table中的rule属性对应的就是rule.xml文件中tableRule的name,具体有哪些分表和分库的实现,建议还是看下文档。我这里选择的mod-long就是将数据平均拆分。因为我后端是两台物理库,所以rule.xml中mod-long对应的function count为2,见下面部分代码:

数据库读写分离

配置如下:

这样的配置与前一个示例配置改动如下:

删除了table分配的规则,以及datanode只有一个

datahost也只有一台,但是writehost总添加了readhost,balance改为1,表示读写分离。

以上配置达到的效果就是102.168.0.2为主库,192.168.0.3为从库。

注意:Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mycat的主从复制将数据复制到readhost,这个问题当时候我纠结了好久,数据写入writehost后,readhost一直没有数据,以为是自己配置的问题,后面才发现Mycat就没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。

至于其他的场景,如同时主从和分表分库也是支持的了,只要了解这个实现以后再去修改配置,都是可以实现的。而热备及故障专业官方推荐使用haproxy配合一起使用,大家可以试试。

使用

Mycat的启动也很简单,启动命令在Bin目录:

如果在启动时发现异常,在logs目录中查看日志。

wrapper.log 为程序启动的日志,启动时的问题看这个

mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。

mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好的执行。

Mycat带来的最大好处就是使用是完全不用修改原有代码的,在mycat通过命令启动后,你只需要将数据库连接切换到Mycat的地址就可以了。如下面就可以进行连接了:

连接成功后可以执行sql脚本了。

所以,可以直接通过sql管理工具(如:navicat、datagrip)连接,执行脚本。我一直用datagrip来进行日常简单的管理,这个很方便。

Mycat还有一个管理的连接,端口号是9906.

连接后可以根据管理命令查看Mycat的运行情况,当然,喜欢UI管理方式的人,可以安装一个Mycat-Web来进行管理,有兴趣自行搜索。

简而言之,开发中使用Mycat和直接使用Mysql机会没有差别。

常见问题

使用Mycat后总会遇到一些坑,我将自己遇到的一些问题在这里列一下,希望能与大家有共鸣:

Mycat是不是配置以后,就能完全解决分表分库和读写分离问题?

Mycat配合数据库本身的复制功能,可以解决读写分离的问题,但是针对分表分库的问题,不是完美的解决。或者说,至今为止,业界没有完美的解决方案。

分表分库写入能完美解决,但是,不能完美解决主要是联表查询的问题,Mycat支持两个表联表的查询,多余两个表的查询不支持。 其实,很多数据库中间件关于分表分库后查询的问题,都是需要自己实现的,而且节本都不支持联表查询,Mycat已经算做地非常先进了。

分表分库的后联表查询问题,大家通过合理数据库设计来避免。

Mycat支持哪些数据库,其他平台如 .net、PHP能用吗?

官方说了,支持的数据库包括MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,很赞。

尽量用Mysql,我试过SQL Server,会有些小问题,因为部分语法有点差异。

Mycat 非JAVA平台如 .net、PHP能用吗?

可以用。这一点MyCat做的也很棒。

有什么冷门但好用的软件呢?

Essentialpim PRO:日程管理和知识管理的大神级软件,惠普、三星、佳能等知名公司的选择。

不但可以当做日程管理软件,还可以作为知识管理软件:

独立数据库,确保安全。多端通过wifi同步:

该软件得到国际大牌公司认可:

这样一款软件,价格并不高。

当然,如果你愿意,可以选择河蟹版。

说完了传统知识管理软件,还有时下比较热门的双链笔记软件:

简单了解一下什么是双链笔记,不需要搞懂复杂概念,和热门的知识管理软件NOTION做一个比较:

据说,roam edit未来的发展空间和底层架构都比NOTION大整整一圈。

Roam到底能做什么,能解决什么问题?

简单来说,就是:让知识能用

类似下面的图:

为什么这样的图能让知识更有效呢?

看下图案例(软件-全世界的界面):

知识之间、信息之间建立关联,只要知道任何一个关键点,就能顺藤摸瓜的构建整个知识大厦。

这才是真正的有用、能用的知识。

软件界面(太复杂,拉轰仅仅在初步摸索阶段):

XYplorer:文件管理的超冷门超强大软件

一位大V这样评价它:

看看它酷炫又实用的界面:

当然还可以选择以下软件:

qdir

qttabbar+clover

one commander

tc

讯读PDF:拉轰目前认为最好的PDF软件,没有之一

下面的思维导图是目前的推荐软件:

拉轰出品,必属精品

一般用哪些工具做大数据分析?

其实,大数据分析这个部分是很大的模块,包括从底层数据仓库搭建到最后的数据展示,非常复杂。

你说的是业务、IT都能用的数据处理和展现部分吧,今天就推荐一个。

前言"数据可视化工具,可爱者甚番。分析师独爱R,自Python以来,世人盛爱matplotlib。余独爱FineBI之出分析而不拖沓,做可视化还算酷炫......."。

哈哈,秀个拙劣~

本文向大家介绍最近更新的一个数据分析可视化神器——FineBI。和Tableau、PowerBI都是同属一类工具,自助式BI。

之前我在一些回答里面也有过推荐,不过我更爱他的兄弟FineReport,以至于换了两家公司都连续推荐采购。但最近新出的5.0版本着实让我惊艳了一把,给人的感觉,比PowerBI更成熟稳定功能更多,平价版的Tableau替代!

接下来讲重点讲解它的主要功能、特点和同类具的对比、以及基本使用方法。

后面还会再针对这个工具写一篇详细深入的上手教程。

阅读目录前言FineBI的主要功能FineBI的主要特点FineBI Vs 其他同类产品FineBI的分析思想获取方法&学习资料小结FineBI的主要功能

先来说说BI,BI全称商业智能(Business Intelligence),是一套完整的数据解决方案,将企业的数据有效整合,快速制作可视化报表,以供业务决策。它一般涉及数据仓库(现也和很多大数据方案对接)、ETL、OLAP分析,权限控制等模块。

顾名思义,FineBI是一款BI商业智能工具,能简单快速的生成各种酷炫的可视化数据报表,做有目的性的数据分析。

所以,它主要完成下面几个工作:

1. 数据的整合

2. 数据的分析和可视化

3. 报表制作与发布

FineBI的主要特点

BI工具那么多,为何我要重点推荐这款BI工具呢?

Tableau和PowerBI的好自不用我多说,知乎上大家都议论了很多。

但这款BI做为国产,不由得让我产生好奇和好感,值得关注和鼓励。更何况它能够足以应对基本的数据分析,不虚于那两者,且具备下面几大特点:

1、打通各类数据源

FineBI能够从各种数据源中抓取数据进行分析,除了支持大家常用的Oracle、SQLServer、MySQL等数据库,还支持SAP BW、HANA、Essbase等多维数据库。

大数据前端分析,FineBI可对接Hadoop、Kylin、Derby、Gbase、ADS、Hbase、Mongodb等大数据平台。在对接方面有自己的分布式连接方案。

下图是FineBI的数据连接窗口:

还支持导入Excel数据,支持从R语言脚本导入数据。所以基本能对接各类数据源,打通并整合。

2. 易用性(无需编程)

笔者给自己的定位是一枚数据科学家,因此不会也不能将过多精力放在可视化工作上。毕竟数据库/数据仓库系统架构,数据挖掘算法研究等工作更是重中之重。而FineBI采用的拖拽数据字段,自动出图的操作方式,将我从可视化的泥潭中解放出来,把更多精力投放到数据管理,算法研究和业务沟通上。下图展示了FineBI清爽商务的工作界面。

易用性还体现在数据处理方面。

要知道一份数据拿到在分析是还是要做很多公式计算、过滤筛选处理的。惊喜的是这个工具内置了各种计算公式、过滤组件。

比如时间过滤,大家觉得还要手写公式么。

各种现成的计算公式,基本告别SQL和代码。

这里展示的仅仅是一小个方面,绝大多数商业公司出品的软件在易用性方面完爆开源产品。

3、可视化颜值高

一些图表(出自官方)

下面这些图是笔者20分钟不到就做好的,稍加美化,估计也能达到大部分客户在颜值上的要求了:

要知道同样的工作使用R语言的ggplot2至少要2小时(含调试),使用Python的matplotlib就更久了。

4、数据权限管控

FineBI的数据权限管控,可以说是很专业了,这也是开源和商业不能比的。

笔者是FineReport的深度用户,FineReport是报表应用工具,应用面更广,数据安全性要求也更高,FineBI差不多是沿用了其兄弟产品的一套权限管理方案。可以对不同部门/岗位/角色的人员,进行数据源/业务包/数据表/分析报表的权限管控。简单来讲,你可以让不同人看到仅有自己权限下的报表和数据。

嗯,暂时就说这几点,再说有打广告嫌疑了......

FineBI Vs 其他同类产品

1. FineBI VS Excel

两者是不太一样的产品,Excel更全面更加注重数据处理,而FineBI比较精简更注重报表及可视化,FineBI更像是数据透视表+少量VBA。不过两者结合用相得益彰。

2. FineBI VS R语言ggplot2

ggplot2其实是R语言的可视化包,因此对于熟悉R语言的人来说,使用ggplot2会非常得心应手。同时由于ggplot2是由编程语言R驱动,因此它在定制化方面肯定做得比FineBI要好。但是要写一定量代码,这个不是每个人都擅长,毕竟如果是简单的分析,大可不必入R的门。

3. FineBI VS Echarts等开源图表

Echarts一般是给前端程序员用的,需要编程语言JS驱动,不推荐没有编程基础的分析师使用,虽然Echarts可视化更丰富。

4. FineBI VS 其他商用BI工具(如Tableau、PowerBI等)

功能方面都没有太大差异,就是你多一个,我少一个的区别。对大部分人来说日常的数据分析足够了。

使用感都有所不同,FineBI有个建立业务包环节,对数据做业务/场景区分。PowerBI属于组件拖拽式风;Tableau在分析时和FineBI差不多,探索式分析,调整可视化样式。

实际企业级商用有差异,因为要考虑得更多。企业级应用出产品使用上还要更多关注平台对接,架构方案,数据抽取方式还有性能,包括之前提的权限管控等,FineBI和Tableau更有商用基因,具体要看自己的实际需求和使用环境。

综上所述,以上的工具都没有单纯的优劣之分,具体问题具体分析,什么需求用什么工具。不过,如果你想快速地做美观的可视化报表,那FineBI值得一学。

FineBI的数据分析思想

用FineBI做数据分析,总体的思路是这样的,和Tableau有点像:

1.先连接数据库,导入数据源。支持的数据源类型前文已说过。

2.然后初步处理数据,选择要分析的字段,分组汇总、新增列、合并表、行列转换等等。

3.接着进行数据分析。如果没目的,可以先根据自己的假设拖拽数据字段,看看数据是什么趋势是否有规律,渐渐摸清楚思路,所谓探索性分析。如果有目的,直接可视化就行。

4.最后形成可视化分析报告,导出或分享。

这里,我后面会出个一个详细的案例,可能会更能理解。

小结

有些人可能会对商业软件带有一种排斥观念,个人觉得这是比较幼稚的。商业软件固然需要花钱,但劣质的开源软件更可能浪费大家的宝贵时间。显然我们应该将精力更多的投放到数据和算法本身以及具体业务上,工具只不过是工具罢了。

这个观点比较主观,不过请不要纠结,因为FineBI是免费的,企业级部署会有2个并发限制,需要购买lic。

nginx是Java后台开发最常用最入门的技术吗?

谢邀~

Nginx确实是比较常用的技术(服务器)之一,不仅Java应用可以使用到,它可以应用在很多场景下。下面我就按照自己的理解,向大家介绍一下。

什么是Nginx

如果你是Java程序员,没用听说过Nginx的话,那么你肯定听说过Apache吧。Nginx也是一样,是一种WEB服务器。它有以下特点:

是使用C语言开发出来的,基于事件驱动架构,性能很高,高并发能力极强;

跨平台,可以运行在windows、Linux、Mac、Solaris等操作系统上;

第三方模块很多(生态环境好)。

那么我们再看看Nginx能做什么:

反向代理

这个概念大家一定很耳熟,那么在说反向代理之前,先看看什么是正向代理。

正向代理:我想访问谷歌,没办法直接访问,这时候找一个代理服务器,我通过代理服务器访问谷歌;正向代理特点是客户端知道要访问的服务器地址是什么;服务器不知道客户端是谁,正向代理-代理的是客户端;

反向代理:代理服务器接收互联网端的请求,转发请求到内网中的服务器(可能会是多台服务器中的一台),得到服务器的响应之后,再把响应返回给客户端;这时候客户端不知道服务器在哪,反向代理-代理的是服务端。

在一个项目的架构中,正向代理和反向代理可能同时存在。

负载均衡

因为Nginx可以做反向代理服务器,它可以把客户端的请求发送给服务器端;客户端的请求数量,就是负载量。

那么把负载量,按照一定的规则,分发给不同的服务器就行处理,这个就叫做负载均衡;负载均衡的好处,就是把压力平均到每一台服务器上。负载均衡的调度方法有:轮询,一个一个轮着发;ip_hash;url_hash;fair等。

总之,Nginx是常用的软件(服务器)之一,最好学习一下。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

本文转载自互联网,如有侵权,联系删除