真人亚洲娱乐大家好,我想做一个类似滴滴打车的软件,大概需要用到哪方面的技术?

( 真人亚洲娱乐 )

要做一个这样的项目,类似于滴滴打车,美团众包

其实就是同城配送:有新的外卖订单了,实时推送给订单附近的配送人员端,配送人员接到单子后配送。

看起来很简单,但是对我这个web开发的来说有点不知道从何动手,我首先想到的:

配送人员手机的APP与服务器WebSocket直连,实时将地理位置经纬度上传给服务器,服务器使用内存数据库将位置保存下来(redis/mongodb),然后定时循环不断的检测新订单,不断的计算新订单附近是否有配送人员,有的话就推送给相应的配送人员。

想法很简单,可是有几个问题:

  1. 配送人员获取位置怎么实时传给服务器呢,每隔几秒钟吗,那不像ajax一样了,我想用WebSocket稳定一些吧,配送人员骑着车总在到处跑的。

  2. 服务器用内存数据库存配送人员的位置信息吗,但是redis支持地理位置索引吗,等下查的时候怎么查,怎么查订单附近的配送人员。

  3. 这会不会产生大量的数据啊,内存数据库能实现吗

我不知道这里面需要用到哪些知识,猜测应该有这几种技术:
1: nosql,内存数据库
2: 实时通信,多进程,多线程,并发
3: 队列定时程序CLI,后台常驻服务
4: 空间索引,空间计算,地理位置索引计算
5: Socket编程Socket通信,Socket推送,H5 Socket
6: APP开发,但是我用web H5Socket能不能行呢,配送人员不一定要用APP吧,只要WebSocket稳定就行了(再弱弱的问一句,ajax行不行)

希望有经验的大神指点一下,不要叫我放弃,可能涉及的知识面我不了解,但是不妨说出来,我去一一学习,起码知道这个里面需要用到哪些知识。

补充配图(蜂鸟众包/达达配送):

谢谢大家了^_^

首先,谢谢邀请回答。
这种项目涉及到服务端,客户端
客户端
如果客户端使用H5的话,建议用socket.io,不要用自带的websocket,前者解决方案多,而且可以断线重连。前端逻辑不多,无非是定期获取坐标然后上班服务端同时人在地图上移动。
服务端

  1. web服务端

  2. socket.io服务端
    web服务端语言不限,请注意WEB服务端不要用复杂计算,web服务端只负责把数据库数据显示

后台程序比较多,消息队列,位置计算这些计算量大的需要放到后台。

要实现其实也没什么复杂的
首先建立长连接(随意的网络技术,什么网络框架都可以,只要能建立长连接),当有订单过来时 服务器端推送消息去告知客户端将地理位置发送过来(根据地图api获取),然后服务器端去和下单的客户的地理位置做对比(可自己对比,如果地图有提供api,可以用api对比),挑出最近的一批人,然后派单(普通编程逻辑)。

然后一期可以不实现订单追踪功能(即可以不保存人员的轨迹数据),等以后再实现,要实现订单追踪,就需要每隔几秒发送位置信息(这里可以缓存,也可以持久化,看日后分析是否需要,缓存可以用redis可以用mongodb,什么样的都可以),然后服务器更新位置信息。

其中用到的技术其实可以选择,现在位置信息,位置对比基本上都是通过调用地图的api获取,要知道原理,可以做完项目后自己研究。

逻辑简单,第一期用的技术也没什么复杂的,大数据什么的等量上来在过滤,想的太复杂就成了过度设计,这是大忌。

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人娱乐mysql为什么修改了my.ini之后,用命令行查询版本就不行了?

( 真人娱乐 )

修改成utf8之后,mysql命令就报错了,改回来就好了,这是为什么呀?

确认
utf8
utf8
utf8

谢谢邀请。亲设置的编码写错了,你看看提示就一目了然了

只设置 character-set-server=utf8呢?

utf8

你看看你写了啥

第一个圈里写错了。utf8 你写成了uft8

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人娱乐sql update语句提示执行成功,但是结果却没有成功修改,这是为什么呢??恳请高手赐教呀

( 真人娱乐 )

业务逻辑太复杂,简单描述如下:
1.更新A表成功。
2.更新B表。{共50条,成功36条,失败14条}
3.调用外部接口,同步数据,发送notify消息,并订阅消息更新表。
4.同步外部接口。

线下一直没有问题,线上的bug是这样的,我在*serviceImpl.java中整体配置了事务,在controller层使用了分页,每10条数据,顺次执行上面的1.2.3.4步骤,现在的问题是,2步骤的日志:sql update语句提示执行成功,但是结果却没有成功修改,这是为什么呢??恳请高手赐教呀

事务的autocommit是true还是false?

事务没有提交。

  1. 这个执行成功的日志是 logback 的日志 还是你自己打得日志?
    2.你的逻辑是否在serviceImpl中的?

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人亚洲娱乐java mysql数据库查询效率问题

( 真人亚洲娱乐 )

主要实现的功能是事先通过条件筛选一部分id出来,在通过遍历这些id找到相应的Bfinalstatement,存为对象,放入list,但是发现数据量才达到1000时(1000个Bfinalstatement),给id设置了index,但需要的总查询时间都还要500~600ms了,效率太低了,具体关键代码如下,希望得到帮助,谢谢。
(采用了dbcp连接池)

    @Override
    public BFinalStatement getFinalStatementFromId(String id) throws NamingException, SQLException {
        // TODO 得到乙方结算信息
        Connection con = null;
        PreparedStatement pr = null;
        ResultSet rs = null;
        BFinalStatement fstate = null;

        sql = "select BConSelfID, PaidAmount, UnpaidAmount, InvoiceTotal, ShouldPay "
                + "from bfinalstatement where BConSelfID=?";
        con = getConnection();
        pr = con.prepareStatement(sql);
        pr.setString(1, id);
        rs = pr.executeQuery();

        while (rs.next()) {
            fstate = new BFinalStatement(rs.getInt("PaidAmount"),rs.getString("BConSelfID"));
            fstate.setInvoiceTotal(rs.getInt("InvoiceTotal"));
            fstate.setShouldpay(rs.getInt("ShouldPay"));
            fstate.setUnpaidAmount(rs.getInt("UnpaidAmount"));
        }
        // 释放连接
        close(con, rs, pr);
        return fstate;
    }

单个查当然慢了,你这个sql就算只要1毫秒,执行1000次也1秒了。用where BConSelfID in ()来批量处理会快些,但注意in里面不要太多个ID,一次100一共取10次差不多。

再慢的话就要善用缓存了

— 修改 BConSelfID = ‘xxx’
— 执行以下SQL,将结果贴出来:

 explain select BConSelfID, PaidAmount, UnpaidAmount, InvoiceTotal, ShouldPay   
 from bfinalstatement where BConSelfID = 'xxx'

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人娱乐mysql 怎么查出近7天每日的数据?

( 真人娱乐 )

表里有个字段纪录每次点击的时间,怎么查出7天每日的数据用php显示出来,能不能一条sql语句解决呢。

select * from xxx where click_time >= now() - interval 7 day;

如果要统计每天的次数:

select day(create_time), count(1) from xxx where click_time >= date(now()) - interval 7 day group by day(click_time);

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人娱乐如何高效找出一批非法设备,它们是非法登录过多个账户的(即这些被登录的账户的常用登录设备是别的机器)

( 真人娱乐 )

表数据在千万条,关键字段有username,mac,ip

千万级别 并且我相信还在增长,做什么都不会比,每次登陆根据规则做判定,然后单独存一个表来的高效了

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人娱乐高并发写入mysql的设计

( 真人娱乐 )

最近开发一个项目。客户端每隔10秒提交100行数据给服务端,服务端查重后写入。
客户端约在几万左右,提交数据比较集中,不考虑读数据的问题。
现在的设计是:
数据库按客户端进行分表。每个表的数据量不高。
服务端获得数据后,先插入redis队列,然后在通过定时任务插入数据库。
问题是:
1、服务端提供给客户端的接口,是否能满足几千上万的客户端同时post数据(客户端是10秒提交一次)?
2、将数据首先保存在redis队列中,如果有几十上百万的数据,redis是否稳定?
基本目标是保证服务端能正常提供服务。

———————- 补充内容 ——————————-
项目主要是采集用户的数据。开机就会自动运行。
每次提交100条,10秒提交一次,一般用户每天在10次以内,也就是1000条数据以内。
每条数据包含五六个值对,在100字符以内。
需要保证每天数据的完整性。会出现多个客户端采集同一用户数据的情况,所以需要避免重复。

现在考虑是这样的:
数据表按用户分表。
用户提交的数据按用户先保存在redis队列中,即每个用户每天一个队列,保存到数据库后,删除该队列。

使用MyCat

第一个,有几个考虑

  1. 带宽是否足够

  2. cpu数量,假如4核,php-fpm的数量也是4个的话,每个请求需要50-150ms的处理时间,算下持续时间内处理的请求量大概是多少。

  3. 内存,一个进程10-25M的内存占用。

可以考虑的有:负载均衡,dns轮询。同时注意集群的高可用。

第二个,也有几个考虑

  1. 数据行,一行的长度是?redis对于1k以上都会有性能下降。

  2. 处理速度,队列里面会堆积多少数据,占用内存多大

  3. redis架构,如何保证数据不丢失,如何做高可用

  4. 目前的资源是否允许该方案,是否有其它方案。

并发写不行?那就主主双活,并发写减压50%

  1. 合并插入,不要1条1条插入,比如对应同一张的插入操作,合并1000条插入,这样可以减少交互的次数

  2. 如果这张表只是简单的插入和查询的操作,不需要事务支持的,可以考虑使用MyISAM引擎,相对于InnoDB,在插入时可以获得更高的性能

可以做数据库sharding,一致性hash或者简单的id进行区间hash,应该可以满足吧,如果感觉麻烦,读写分离先看看负载

用队列试试?

看题主说数据产生相对集中…那么可以考虑下利用队列任务将集中的任务时段稍微拉宽一点….尽量平滑写入…需要在写入读取延迟和平滑处理时长之间找一个合理的平衡点即可….要是实在是没得让步余地就其实前面说的高端路子…另外不想折腾数据库的话也可以试试先写到dump文件…另一个配套导入….不知道这算不算野路子….

-1. 一次提交100条,10秒来处理显然是比较急的,我假定你的数据是允许部分丢失的前提下,可以考虑在客户端做缓存(把数据缓存在客户端,其实是一种冒险的做法),比如我200条,20秒提交一次。
-2. 服务端可以采用任务队列,减少服务器的阻塞,从而提高并发。(10秒提交一次,很容易出现高并发)

-3. 另外要考虑数据是否经常进行读写,否则建议才有ehcache,集群同步带来额外的开支。

-4. 这么特殊的业务肯定不要和其他业务公用服务器了.

-5. 后面关于怎么分表的,这个得看你的业务了.

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人亚洲娱乐如何创建出高效且扩展性强的数据库表结构和扩展性强代码?(已附上举例)

( 真人亚洲娱乐 )

比如说现在我要为某商城做一个套餐功能(功能自己已经实现
关键是解答下面红色的字标出的问题,谢谢~O(∩_∩)O~

  1. 商城的初始功能只是能买某个商品.后期添加的套餐功能都已经改到原有代码,而且改动很大。
    我该如何在关键的地方做出判断,以防后期需要添加额外的功能?如何削弱代码的耦合性,后期添加功能可以减少对原有代码的修改?

你这个问题用mysql可能需要三张表:

  1. 商品表

  2. 套餐表,套餐描述、价格、有效期之类

  3. 套餐与商品关联表,基本就两个字段,套餐ID和商品ID。多对多的关系,因为一个套餐肯定包含多个商品,同时某个商品也会属于不同的套餐

具体实现的时候套餐和商品完全可以独立开发两个模块,分别是商品的增删改查购买等功能,和套餐的增删改查购买等功能。套餐和商品唯一耦合的地方只是那个关联表,也就是当删除某个商品的时候,需要注意是否影响对应的套餐。其他功能基本没有耦合

同时你的订单表可以有个类型字段,说明是套餐的订单还是单一商品的订单

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人娱乐Java从服务器端下载文件保存到本地,不是下载的图片?

( 真人娱乐 )

public static void downloadFile(String urlPath, String filePath) throws IOException {
        URL url = new URL(urlPath);
        String name = urlPath.substring(urlPath.lastIndexOf("=")+1);
        String filePaths = filePath+"/"+name;
        File dirFile = new File(filePath);
        if (!dirFile.exists()) {
            dirFile.mkdir();
        }
        URLConnection connection = url.openConnection();
        InputStream in = connection.getInputStream();
        FileOutputStream os = new FileOutputStream(filePaths);
        byte[] buffer = new byte[4 * 1024];
        int read;
        while ((read = in.read(buffer)) > 0) {
            os.write(buffer, 0, read);
        }
        os.close();
        in.close();
    }

    public static void main(String[] args) {
        String urlPath = "http://10.192.32.111:80/production-jcw/getDownload.do?fileName=49e23d3a-5e11-432d-9f33-91c93130b37b.dwg";
        String filePath = "C:/Users/MrLi/Desktop/";
        try {
            downloadFile(urlPath, filePath);
            System.out.println("下载成功");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("下载失败");
        }
    }

你参照下面这个改改就行了,希望能帮到你。

String fileName=imagesdata.substring(imagesdata.lastIndexOf("/")+1,imagesdata.length()); 
response.setHeader("Content-Disposition", "attachment; filename="+fileName);    response.addHeader("Content-Length", "");     
response.setContentType("image/jpeg");   
URL url = new URL(imagesdata);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
DataInputStream in = new DataInputStream(connection.getInputStream());
DataOutputStream out = new DataOutputStream(response.getOutputStream());
                        byte[] buffer = new byte[4096];
                        int count = 0;
                        while ((count = in.read(buffer)) > 0)
                        {
                            out.write(buffer, 0, count);
                        }
                        out.close();
                        out.flush();
                        in.close();
                        connection.disconnect();

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人网上娱乐MySQL where 条件替换疑问?

( 真人网上娱乐 )

字段:ariclecategory/index?type=article

值 :ariclecategory/index

需求:比较?之前的自读内容和值是否相等

想每次查询的时候,将包括问好在内的内容给去除掉在比较,请问怎么写where?

目前:select * from where ziduan = ‘ariclecategory/index’;

select * from where ziduan like 'ariclecategory/index%'

ariclecategory/index 如果是变量,请使用变量替换
前缀匹配的like是可以用索引的。后缀匹配和模糊匹配不可以。

select * from where ziduan like ‘ariclecategory/index%’ ?没懂啥意思

去掉问号这种数据处理的事情是要放在程序中进行的,sql的where就按你现在这么写的就行

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人娱乐构建一个第三方登录平台

( 真人娱乐 )

已存在电商网站两个、资讯类网站一个、内部系统三个,每个系统都有自己的用户表。
1.现在我要做一个统一登录点,提供登录功能,该如何设计登录表,登录表的用户与其他系统的用户怎么关联,我要实现在电商类的用户有个唯一标识,资讯类的用户也有自己的一个唯一标识。
2.每个登录用户都有自己角色,比如,电商角色就有管理订单,开新店铺的等等权限,权限这块怎么设计?
3.第三方登录的那种形式该如何做?

权限问题由每个系统内部自己解决,怎么设计随便搜一下就行,也可以参考成熟框架的ACL设计。

认证中心至少需要:
1- 认证中心登录时用户可以选择自己的登录帐号类型,如电商、资讯、内部,登录后可以绑定其它系统中的账号。
2- 电商、资讯、内部系统都要提供认证API供认证中心
3- 认证中心需要允许用户merge自己关联账号的资料
4- 第三方认证提供token认证及用户基本信息读取的API

没法儿详细回答你,更多的内容只能自己根据需求和现有系统的情况酌情处理了。

两种方法:
1.自己做单点登录(SSO),提供统一的登录接口,注意cookies的域名。
2.用现成的OAuth方案,也就是第三方登录,相对成熟而且使用方便。

补充:看到你用的是Laravel,Laravel应该是有SSO扩展包的,如果是我的话,我直接在路由里面定义好这些二级域名,所以是不需要SSO的,Laravel有OAuth-Server扩展包。

我看你的问题是关于php的,建议看看这些资料
https://github.com/bshaffer/o…
http://bshaffer.github.io/oau…

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人娱乐mysql里show full processlist,进程很少

( 真人娱乐 )

APP和网站每时每刻都有人在访问,只是量不多,但在mysql里show full processlist,却只有几个进程,这是什么原因?

mysql存储引擎属于或支持MVCC,支持并发和I/O多路复用。以为客户端是以TCP连接的形式跟mysql客户端通信,正常情况下客户端会使用已经建立好的连接不会每次执行sql都新建一个连接(从资源和效率角度考虑)。如果瞬时流量很大客户端应该会新建多条连接以这种形式实现异步非阻塞来处理请求,每个TCP连接都会一个断开等待时间,如果到了这个时间还没有被使用过它就会被销毁,show full processlist看到的其实就是这些连接。这些都是客户端mysql插件连接池具备的功能。

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人网上娱乐如何在高并发下,http请求返回绝对的当前请求是第几个请求?

( 真人网上娱乐 )

比如,我第一次访问请求返回json:
{"n": 1}

我第100次访问请求返回json:
{"n": 100}

传统的写数据库,再查数据库返回,在并发大时好像不能保证,我应该怎么办?这应该是最简化了的问题了

最简单的方法就是建个自增id主键的mysql表,然后每来一次请求就插一条记录,再读出这条记录,读出的id就是你要的值。

然后就可以根据id值来轻松处理高并发的场景了,比如【秒杀】就可用id小于300且能被6整除的规则认为秒杀成功;【抽奖】可以用能被100整除(百分之一概率)作为中奖等等。

如果自己实现也无非就是单线程死循环处理socket请求维护一个全局变量,不如用现成的mysql方便可靠。

如果是java的话,一个全局的AtomicLong可以满足你的需求吧,getAndIncrement原子操作,再加上volatile修饰,如果是其他语言,大同小异吧

使用redis中的setnx(id),单线程保证每次加1,而且还是内存数据库,速度超级快。

  • 读操作:使用缓存

  • 写操作:使用队列异步写入

纯粹Java的话,可以把计数器对象做成单例,通过filter拦截所有请求计算器加1(需要同步)。不知道你说的数据库是什么意思,{n : 100},n是数据库拿的?

其实你要做的是一个常驻内存的队列,按请求先后做排队处理.
单机上可以试试Linux内存文件系统(tmpfs)上/dev/shm读写SQLite.
读文件不需要经过网络,也不需要自己实现内存常驻,锁,自增以及唯一约束.

<?php
header('Content-Type: text/plain; charset=utf-8');
// sudo mkdir -m 777 /dev/shm/app
$file = '/dev/shm/app/data.db3';
$ddl = "
BEGIN;
CREATE TABLE IF NOT EXISTS queue (
    id           INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id      INTEGER
);
CREATE UNIQUE INDEX IF NOT EXISTS queue_user_id_idx ON queue(user_id);
COMMIT;
";
if(!file_exists($file)) {
    //多核下多进程并发时可能都会进入到这个判断分支,所以DDL中要用IF NOT EXISTS
    $db = new PDO('sqlite:'.$file);
    $db->exec($ddl); // pdo_sqlite 的 query 和 prepare 不支持一次执行多条SQL语句
} else {
    $db = new PDO('sqlite:'.$file);
}
$stmt = $db->prepare('INSERT INTO queue(user_id) VALUES(?)');
$stmt->execute(array(time())); //time()换成你的用户ID
echo $stmt->rowCount()."\n";   //查询中受影响(改动)的行数,插入失败时为0
echo $db->lastInsertId();      //插入的自增ID,插入失败时为0
// php -S 127.0.0.1:8080 -t /home/eechen/www >/dev/null 2>&1 &
// ab -c100 -n1000 http://127.0.0.1:8080/

最简单的是用redis的zset进行自增,效率高,简单,单机的话也可以考虑使用atomiclong(宕机重启后失效)

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人亚洲娱乐mysql中 when then 的优化

( 真人亚洲娱乐 )

请问该如何简化代码
思路是:

1, 对应的是 8月27日(周六)上午 9:00
2, 对应的是 8月27日(周六)下午 14:00
3, 对应的是 8月28日(周日)上午 9:00
4, 对应的是 8月28日(周日)下午 14:00

replace(replace(dg_order_time,'1','8月27日(周六)上午 9:00'),'2','8月27日(周六)下午 14:00')

以此类推

这是要做课程表?日期可以写死?

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人网上娱乐tinkphp3.2中 form表单的上传 和 文件上传不能同步

( 真人网上娱乐 )

在form表单中
<form action=”__URL__/tjkh” method=”post” id=”form3″ enctype=”multipart/form-data”>或者是
<form action=”__URL__/upload” method=”post” id=”form3″ enctype=”multipart/form-data”>

html 中的form表单

<form action="__URL__/upload" method="post" id="form3" enctype="multipart/form-data">
        <p style="margin-top: 10px;">
            <span id="" >
                &nbsp;&nbsp;&nbsp;&nbsp;类型:
            </span>
            <select name="type"  id="type" onchange="selectInput(this)"> 
                     <option  value="房抵贷" selected="selected">房抵贷</option> 
                     <option  value="垫资贷">垫资贷</option> 
                     <option  value="企业贷">企业贷</option> 
                     <option  value="暂无1">暂无1</option> 
                     <option  value="暂无2">暂无2</option> 
                     <option  value="提醒通知">提醒通知</option> 
                     <option  value="银行栏目">银行栏目</option> 
            </select>
        </p>
        <p>
            <span id="">
                <a style="color: red;">*</a>
                借款人姓名:
            </span>
            <input type="text" name="xingm" id="xingm" value="" />
        </p>    
        <p>
            <span id="">
                &nbsp;&nbsp;&nbsp;&nbsp;电话:
            </span>
            <input type="text" name="phone" id="phone" value="" />
        </p>         
        <p>
            <span id="">
                &nbsp;&nbsp;&nbsp;&nbsp;年龄:
            </span>
            <input type="text" name="age" id="age" value="" />
        </p>             
        <p>
            <span id="">
                &nbsp;&nbsp;&nbsp;&nbsp;婚否:
            </span>
            <select id="marriage" name="marriage" > 
                <option value="是" selected="selected">是</option>
                <option value="否">否</option>
            </select>
        </p>
        <p>
            <span id="">
                &nbsp;&nbsp;征信情况:
            </span>
            <select  id="cre_repoting" name="cre_repoting" > 
                <option value="优" selected="selected">优</option>
                <option value="良">良</option>
                <option value="差">差</option>
            </select>
        </p>
        <p>
            <span id="">
                &nbsp;月进账流水:
            </span>
            <input type="text" name="water" id="water" value="" />
            <span id="" >万</span>
        </p>             
        <p>
            <span id="">
                &nbsp;&nbsp;贷款额度:
            </span>
            <input type="text" name="lines" id="lines" value="" />
            <span id="" >万</span>
        </p>
        <p>
            <span id="">
                &nbsp;&nbsp;营业执照:
            </span>
            <select id="license" name="license"> 
                <option value="有" selected="selected">有</option>
                <option value="无">无</option>
            </select>
        </p>
        <p>
            <span id="">
                &nbsp;<a style="color: red;">*</a>
                客服经理:
            </span>
            <select id="manager" name="manager">
                <option value="张" selected="selected">张</option>
                <option value="王">王</option>
                <option value="李">李</option>
            </select>
        </p>
        <p>
            <span id="">
                &nbsp;&nbsp;贷款种类:
            </span>
            <select id="species" name="species"> 
                <option value="先息后本" selected="selected">先息后本</option>
                <option value="等额本息">等额本息</option>
                <option value="等额本金">等额本金</option>
            </select>
        </p>
        <p>
            <span id="">
                点位是否代收:
            </span>
            <input type="radio" name="radio" id="radio" value="01" checked style="width: 3em;">是
            <input type="radio" name="radio" id="radio" value="02"  style="width: 3em;">否
        </p>
        <p>
            <span id="">
                &nbsp;&nbsp;&nbsp;&nbsp;备注:
            </span>
            <textarea id="note" name="note"></textarea> 
        </p>
        <p>
            <span id="">
                文件材料:
            </span>
            
            <input type="file" name="file" style="margin-top: 1em;" >
                <item label="本地上传" onclick="doFileBrowse(this);"/>
            </input>
        </p>
         <p>上传说明:</p>
          <p>支持上传文件类型:'jpg', 'gif', 'png', 'jpeg','txt','doc','wps','html'</p>
          <p>支持上传文件大小:不大于 2M.</p>
        <input type="hidden" name="act" id="act" value="tjkh" />
        <input type="submit" value="提交" onclick="return subk()"/>
    </form>    

这两个表头 是Controller 控制器中的
//写的是 form表单中 input 平常数据的上传 和 添加数据库 的操作

function tjkh(){
        $user = M('customer');
        $uid = session('userid');
        print_r($uid);
        if(isset($_POST['act']) && $_POST['act'] == 'tjkh'){
          $sel1 = I('post.type');
          $name = I('post.xingm');
          $phone = I('post.phone');
          $age = I('post.age');
          $marriage = I('post.marriage');
          $cre = I('post.cre_repoting');
          $water = I('post.water');
          $lines = I('post.lines');
          $lins = I('post.license');
          $manager = I('post.manager');
          $spe = I('post.species');
          $radio =I('post.radio');
          $note =I('post.note');
          $time = time();
          $nm = date("Y-m-d",$time);
          $upload = I("post.file");
          //构建写入的数据数组 
          $data['type'] = $sel1;
          $data['name'] = $name;
          $data['phone'] = $phone;
          $data['age'] = $age;
          $data['marriage'] = $marriage;
          $data['cer_repoting'] = $cre;
          $data['income'] = $water;
          $data['lines'] = $lines;
          $data['license'] = $lins;
          $data['manage'] = $manager;
          $data['species'] = $spe;
          $data['collecting'] = $radio;
          $data['note'] = $note;
          $data['time'] = $nm;    
          $data['upload'] = $upload;
          $data['user_id'] = $uid;
          if($name != ""){
              if($phone != ""){
                  if($age != ""){
                     if($water != ""){
                         if($lines != ""){
                             if($note != ""){
                                 if($user->add($data)){
                                   $this->redirect('Home/zhuye');
                                }else{
                                    $this->error('注册失败7');
                                }
                            }else{
                                  $this->error('注册失败6');
                            }
                        }else{
                              $this->error('注册失败5');
                        }
                    }else{
                          $this->error('注册失败4');
                    }
                }else{
                      $this->error('注册失败3');
                }
            }else{
                  $this->error('注册失败2');
            }    
          }else{
              $this->error('注册失败1');
          }    
        }
        $this->display('Home/tjkh');
    }


// 写的是 form表单中 上传文件的操作
public function upload(){

        $upload = new \Think\Upload();// 实例化上传类    
        $upload->maxSize   =     2*1024*1024 ;// 设置附件上传大小    
        $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg','txt','doc','wps','html');// 设置附件上传类型    
        $upload->savePath  =      './Uploads/'; // 设置附件上传目录    
        $upload->autoSub    =   true;   
        $upload->subName    =   array('date','Ymd');
        $upload->replace    =   true;
        // 上传文件     
        $info   =   $upload->upload();   
        
        if(!$info) {// 上传错误提示错误信息        
        $this->error($upload->getError());    
        }else{// 上传成功        
          foreach($info as $file){
                  $file['savepath'].$file['savename']; 
          }
          $this->success('上传成功!');
        }
        $user = M('up_file');
        $userid = session('userid');
        $time = time();
        $nm = date("Y-m-d H:i:s",$time);
        $upload = $info['file']['name'];
    
        // 保存当前数据对象
        $data['file_img'] = $file['savepath'].$file['savename'];
        $data['user_id'] = $userid;
        $data['file_time'] = $nm;
        $data['upload'] = $upload;
        if($userid != ""){
            $user->add($data);    
            }
    }

相对应的 两个方法 怎么能让 这两个方法同步
而不是只能实现一个方法

在tjkh()方法中调用upload()方法,在upload()里返回保存的路径

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人网上娱乐Mysql大数据表如何对插入操作优化、监控?

( 真人网上娱乐 )

  1. 单表行数在500万以上,有几率到千万。

  2. 读取频率不高

  3. 插入频率在500万之前很高,之后会较慢

插入操作尽量批量插入。读取频率不高,而插入频率高的话索引尽量少些。 此外还可以通过调节mysql参数来优化如innodb_buffer_pool_size,innodb_log_buffer_size来增加性能

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人亚洲娱乐mysql:多表,union,count,group by的问题,求教

( 真人亚洲娱乐 )

select A.uid,count(*) from A GROUP by A.uid UNION all 
select A.uid,count(*) from A,B where B.neid = A.neid GROUP by A.uid UNION all 
select A.uid,count(*) from A,C where C.Type = 'student' and C.neid=A.neid GROUP by A.uid;

如果用每行语句单独查询,结果分别是这样的

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人娱乐powerdesign这个控件在哪里

( 真人娱乐 )

入门级问题,但是我一直没找到:D

如图,权限中心和下面那个框是右边toolboxs里面哪个空间,比如:standard第一行第二个,是不是还有什么设置?
或者说怎么把那个橘黄色的框里面的内容变成透明的,我复制了一个放到了其他的modal里,但是表格上不能放到这个框上,貌似表格被压到橘黄色的框下面了,像这样

勾去掉就好

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人亚洲娱乐如何提高多个游戏服日志分析速度?

( 真人亚洲娱乐 )

业务场景

目前公司采用的游戏日志采集方式为一个服对应于一个日志库,然而游戏后台希望可以实时对这些游戏日志进行分析,当服不多时,这个还可以实时查询,但是游戏服越来越多的时候,这个就有瓶颈了,因为查询的时候后台是希望选择多个服一起进行日志分析的,尽管可以利用多线程进行查询,但等待时间还是会很长(因为服的数量会逐渐比线程数高),甚至直接就超出了网页的等待时间,报504网关等待超时。
后来,针对于查询时间过长甚至查不出结果的情况,做了如下改善:把需要进行的日志分析封装成一个个的定时任务,利用每天的凌晨某个时间跑这个任务,一个任务就会有一个和该任务关联的结果集,并且这个结果集保存在后台本地。那么当用户在后台对相应的日志模块进行分析时,直接读取后台本地的该任务管理的结果集即可。这样一来,确实解决了查询时间过长的问题。但是,随着游戏服的越来越多,在凌晨跑的那些日志分析任务所需要的时间越来越长了,更极端的一个情况就是可能会出现,从第一天的凌晨开始跑(比如一个任务是凌晨1:00开始的),也许到了第二天的凌晨的这个任务时间段(第二天的凌晨1:00,这个任务又到了执行时间了),前一天的该任务都没跑完,新一天的该任务又要开始了。这样循环下去,所需时间会更长,也有可能分析出每天的日志分析结果。
数据库用的是mysql(不管是游戏服的日志库还是后台的结果集),如何在不需要更改数据库的情况下(因为游戏服的日志库那边暂时不可以更改库,即使有想过改成mongodb),在现有的方案上进行优化呢?(假设我那些任务中都不会存在慢查询的情况,但是还是需要很长时间,因为服多)。在此,希望各位有经验的大神给小弟指点指点(⊙o⊙)。小弟感激不尽~~~

logstash
elasticsearch
这是非常成熟的日志分析解决方案。使用也非常简单的,直接使用logback-encoder就将日志写入了logstash-logback-encoder


即使不修改目前数据库的方案,也可以使用elasticsearch在将数据导入至elasticsearch

楼上确实确实是非常推荐的日志收集和分析方案,适合日志格式较清晰,不需额外清洗或转换的日志类型。如果日志数据需要清洗或新格式转换,建议采用Kafka + Spark streaming + Hive on spark 解决方案。其实不建议结果再存回Mysql,因为结果入库到Mysql等关系型数据库会成为整个分析时效的瓶颈。另外这些方案网上都能搜到使用方式。

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…