• 关于

    字符函数怎么安装

    的搜索结果

问题

【精品问答】python五十问第一期

问问小秘 2019-12-01 21:51:26 977 浏览量 回答数 1

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 454222 浏览量 回答数 19

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

【python学习全家桶】263道python热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:21 7217 浏览量 回答数 2

问题

【精品锦集】Python热门问答02

问问小秘 2019-12-01 19:52:09 72 浏览量 回答数 1

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

问题

基础语言百问-Python

薯条酱 2019-12-01 20:12:27 56807 浏览量 回答数 30

问题

【iOS学习全家桶】190道iOS热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:23 5197 浏览量 回答数 1

问题

TypeScript:拥有超能力的 JavaScript

茶什i 2020-01-20 15:15:47 3 浏览量 回答数 0

问题

程序员报错行为大赏-配置报错

问问小秘 2020-06-11 13:18:25 6 浏览量 回答数 1

问题

2018spark技术问答集锦,希望能给喜欢spark的同学一些帮助

技术小能手 2019-12-01 19:31:16 717 浏览量 回答数 1

回答

Re史上最详细阿里云ECS安装wordpress教程 【Xshell连接阿里云ECS】 准备好连接linux服务器的工具,推荐用xshell和xftp。 xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。 下载地址:http://www.newhua.com/soft/36383.htm Xftp 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。 下载地址:http://www.newhua.com/soft/143.htm 一、打开xshell 二、设置云服务器登录信息 三、设置服务器帐号密码 四、设置字符集编码 五、连接后的庐山正面目 阿里云服务器是纯净态的,所以只有看见这样黑黑的面板,软件都是需要自己来安装。------------------------- Re史上最详细阿里云ECS安装wordpress教程 【阿里云ECS(linux)挂载数据盘】 注意:如果是用阿里云一键wep安装的话就不需要挂载数据盘,自动挂载了!首先键入命令查看是否有数据盘 fdisk -l 红框标出的是数据盘大小21.4GB    数据盘进行分区 fdisk  /dev/xvdb    依次输入“m”(查看命令参数)在依次输入“n”,“p”,“1”,”两次回车“,“wq”    格式化新分区 mkfs.ext3 /dev/xvdb1    添加分区信息 echo '/dev/xvdb1  /mnt ext3    defaults    0  0' >> /etc/fstab 命令写入新分区信息。然后使用“cat /etc/fstab”命令查看,出现以下信息就表示写入成功。    挂载新分区使用 mount -a 命令挂载新分区,然后用 df -h 命令查看,出现以下信息就说明挂载成功, 出现(/dev/xvdb1     20G   173M  19G   1%   /mnt)就表示挂载成功了。 ------------------------- Re史上最详细阿里云ECS安装wordpress教程 【阿里云ECS(linux)一键安装web环境】 下载一键安装包 下载一键安装包(ubuntu12.04) 打下面的命令去主目录(/home)看下 cd /home 现在用键盘敲入下面这行命令 cd /home && mkdir tmp && cd tmp 用xftp上传环境安装文件回到shell界面,用ll命令看下情况 ll 是不是多了一个sh目录 接下来按照说明,分步骤敲入安装命令chmod –R 777 sh cd sh ./install.sh出现了一个选择 提示,进入web服务器版本的选择界面这里您可以根据需要选择apache或者nginx服务器,这里是2个服务器的介绍 apache:http://baike.baidu.com/view/28283.htm nginx:http://baike.baidu.com/view/926025.htm这里我们选择nginx,输入n,回车(注意:这样随你喜欢选择没有必要纠结) 到这里,我们就正式进入环境安装环节了。你可以泡杯茶休息下。一般这个过程会持续半个小时的样子。大家有疑问了。那我怎么登录ftp和mysql呢?   在命令行里输入:cat account.log 看到了没? ftp的用户名是:www mysql的用户名是:root 密码就在屏幕上了! 好了。所有配置都已经完成了。是不是很简单! ----------------------------------------------------------------------网站目录:/alidata/www服务器软件目录:/alidata/server Mysql 目录 /alidata/server/mysql Php目录/alidata/server/php   选择了nginx 那么会有一个nginx 目录在 /alidata/server/nginx/   Nginx 配置文件在/alidata/server/nginx/conf   Nginx虚拟主机添加 你可以修改/alidata/server/nginx/conf/vhosts/phpwind.conf  选择了apache那么会有一个httpd 目录在 /alidata/server/httpd   apache 配置文件在/alidata/server/httpd/conf ------------------------- Re史上最详细阿里云ECS安装wordpress教程 【阿里云ECS(linux)安装wordpress程序】 默认安装的是phpwind的论坛程序,当然不是我们想要的程序了,所以就需要删除phpwind程序装上我们自己wordpress程序 用xftp链接服务器(ps:怎么链接上文已经说明),进入alidata/www/phpwind/下面就是程序文件,ctrl A全选删除,上传已经下载好的wordpress,注意的是wordpress程序是你原网站的所有程序,如下图: 服务器ip地址在浏览器中打开112.124.xx.xxx,打开后你会看见wordpress安装键面,需要输入数据库名称、数据库用户名、密码、数据库表前缀。 到这里你会发现提示,数据库密码正确,但无法创建数据库表。这里就需要数据库管理程序phpmyadmin(ps:如果你的服务器配置高手可以直接命令创建数据库表)。首先下载phpmyadmin 上传到/alidata/www/phpwind文件目录下如下图:phpmyadmin文件夹名可自定义(ps:到这里你可能是明白了phpmyadmin其实就是一个网站而已)用:ip地址/phpmyadmin文件夹名,在浏览器中打开进入phpmyadmin网站,输入数据库用户名,密码进入phpmyadmin后台,创建数据库表怎么创建数据库表我想大家应该都会的。 ------------------------- Re史上最详细阿里云ECS安装wordpress教程 【阿里云ECS(linux)安装postfix发送邮件】 其实这里可以使用插件实现,但众所周知wordpress插件一旦装的太多就会造成网站打开速度变慢,为什么要选择安装postfix软件呢,在阿里云论坛有网友说装sendmail,博主刚开始也是折腾sendmail,但群众眼睛是雪亮的,sendmail发件速度太慢了(ps:一个邮件就需要30多秒出去),相对于postfix的秒射那正是爽!我喜欢这只小老鼠! 一、安装postfix如果您安装了sendmail请先卸载它命令: yum remove sendmai 安装: yum install postfix 更改默认MTA为Postfix命令: /usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix 再次检查下是否将MTA改为Postfix了。命令: alternatives --display mta 二、配置Postfix相关参数 1.找到 #myhostname = host.domain.tld , 修改成:myhostname = mail.yujzw.com (你自己的域名)2.找到 #mydomain = domain.tld ,将等号后面的部分改写为你的域名,修改成:mydomain = yujzw.com(此处设置将成为E-mail地址“@”后面的部分)3.找到 #myorigin = $mydomain ,只需将首行的#号去掉即可,其他无需变动4.找到 inet_interfaces = localhost ,将“localhost”改为“all” ,接受来自所有网络的请求5.找到 mydestination = $myhostname, localhost.$mydomain,localhost,在行尾添加“$mydomain”,修改成:mydestination = $myhostname,localhost.$mydomain, localhost, $mydomain ,指定发给本地邮件的域名6.找到 #relay_domains = $mydestination ,只需要将行首的#去掉,定义允许转发的域名7.找到 #mynetworks = 168.100.189.0/28, 127.0.0.0/8 去掉前面的#号,指定内网和本地的IP地址范围,按照情况修改,一般无需变动8.找到 relay_domains = ,修改成: relay_domains =9.找到 #home_mailbox = Maildir/ ,去掉行首的#,指定用户邮箱目录启动命令 service postfix start 检测是否运行中 master (pid 25579) is running... 设置开机启动 chkconfig postfix on 安装已经结束了,此功能已经实现邮件发送,不需要配置邮件服务器。这里要注意的是!如果你没有设置过php.ini文件的话就需要重新设置一边,否自不能实现发送邮件。 设置php.ini文件 编辑php.ini vi /alidata/server/php-5.2.17/etc/php.ini-zend_optimizer.bakvi /alidata/server/php-5.2.17/etc/php.ini 找到 ;sendmail_path = 按 i 进入编辑,将这行修改为 sendmail_path = /usr/sbin/sendmail -t -i 按 Esc 键退出编辑,输入 :wq 保存退出,重新启动阿里云ecs服务器。 wordpress邮件检测发送功能 WordPress不能发信是不是由博客空间引起的,可以使用以下方法检测。新建一个php文件,命名为mail.php ,打开并填上以下代码: 12345678<?php    $txt = "hello";    // 以下的邮箱地址改成你的    $mail = 'somebody@xxx.com';      // 发送邮件    mail($mail, "My subject", $txt);    echo 'message was sent!';    ?>保存并上传至你的网站根目录,并在浏览器运行:网址: http://你的博客网址/mail.php 邮箱查收邮件,如果收到标题为 My subject 的邮件,说明你的空间支持mail()函数发送邮件,也就是WordPress默认的发信方式。 ------------------------- Re史上最详细阿里云ECS安装wordpress教程 由于阿里云图片上传限制。不能一次性编辑完,日后会上传 ------------------------- 回16楼arens的帖子 下面都是“红字”------------------------- 回24楼水清的帖子 红字------------------------- 回26楼andln的帖子     cd /home && mkdir tmp && cd tmp 应该是没有问题的,有能是阿里一键安装包改了参数,官方教程里面没有出现这句命令。具体http://help.aliyun.com/view/13435438.html------------------------- 回28楼guzheng的帖子 一键wep安装是首次安装时会默认自动挂载数据盘,阿里云的教程说的是后期需要挂载多个数据盘。具体操作了就知道了,刚开始我也是挂载了数据盘在一键wep安装,出现重复挂载信息。------------------------- 回50楼emperorboy的帖子 阿里云ECS数据库名默认是localhost,密码、表前缀都是自己定义------------------------- 回54楼天佑的帖子 慢慢来,我也是新手,花了7天时间搞明白的------------------------- 回83楼星空2012的帖子 没有使用过类似的缓存插件。------------------------- 回85楼sunpro的帖子 帖子已经被管理员倒序,请到最后查看!------------------------- 回134楼wujianmin的帖子 是两个  “LL”------------------------- 回137楼wujianmin的帖子 wdCP也行,如果是个人站长或者打算长期从事技术职业的,还是建议自己捣鼓一下。------------------------- 回148楼stneng的帖子 一般情况下,要使域名能访问到网站需要两步,第一步,将域名解析到网站所在的主机,第二步,在web服务器中将域名与相应的网站绑定。但是,如果通过主机IP能直接访问某网站,那么把域名解析到这个IP也将能访问到该网站,而无需在主机上绑定,也就是说任何人将任何域名解析到这个IP就能访问到这个网站。可能您并不介意通过别人的域名访问到您的网站,但是如果这个域名是未备案域名呢?一旦被查出,封IP、拔线甚至罚款的后果都是需要您来承担的。某些别有用心的人,通过将未备案域名解析到别人的主机上,使其遭受损失,这是一种新兴的攻击手段------------------------- 回150楼stneng的帖子 可以!  设置(程序名.conf)文件------------------------- 回 205楼(冰冰__恋) 的帖子 我装的是阿里云os,不是ubunto,个人没用过ubunto,也无法给你说明------------------------- 回 207楼(学历猫) 的帖子 镜像市场只是安装一个系统,不安装wordpress,wordpress需要自己上传------------------------- 回 216楼(moros) 的帖子 看一看.conf配置文件,设置的目录------------------------- 回 219楼(yangtser) 的帖子 phpmydamin只是一个网站不需要设置------------------------- 回 230楼(啊李晕) 的帖子 http://www.yujzw.com/tag/aliyunecs------------------------- 回 241楼(金枝福) 的帖子 是的,512M的基本搞定不定wordpress,我以前是1G,现在也是2G的

爱映疯wp 2019-12-02 02:49:31 0 浏览量 回答数 0

问题

【春招必备】初级程序员必备Linux面试题

黄一刀 2020-03-12 19:15:24 7685 浏览量 回答数 3

回答

在云栖社区的问答区,有一位网友提到有一个问题: 表里相似数据太多,想删除相似度高的数据,有什么办法能实现吗? 例如: 银屑病怎么治? 银屑病怎么治疗? 银屑病怎么治疗好? 银屑病怎么能治疗好? 等等 解这个问题的思路 .1. 首先如何判断内容的相似度,PostgreSQL中提供了中文分词,pg_trgm(将字符串切成多个不重复的token,计算两个字符串的相似度) . 对于本题,我建议采取中文分词的方式,首先将内容拆分成词组。 .2. 在拆分成词组后,首先分组聚合,去除完全重复的数据。 .3. 然后自关联生成笛卡尔(矩阵),计算出每条记录和其他记录的相似度。相似度的算法很简单,重叠的token数量除以集合的token去重后的数量。 .4. 根据相似度,去除不需要的数据。 这里如果数据量非常庞大,使用专业的分析编程语言会更好例如 PL/R。 实操的例子: 首先要安装PostgreSQL 中文分词插件 (阿里云AliCloudDB PostgreSQL已包含这个插件,用法参考官方手册) git clone https://github.com/jaiminpan/pg_jieba.git mv pg_jieba $PGSRC/contrib/ export PATH=/home/digoal/pgsql9.5/bin:$PATH cd $PGSRC/contrib/pg_jieba make clean;make;make install git clone https://github.com/jaiminpan/pg_scws.git mv pg_jieba $PGSRC/contrib/ export PATH=/home/digoal/pgsql9.5/bin:$PATH cd $PGSRC/contrib/pg_scws make clean;make;make install 创建插件 psql # create extension pg_jieba; # create extension pg_scws; 创建测试CASE create table tdup1 (id int primary key, info text); create extension pg_trgm; insert into tdup1 values (1, '银屑病怎么治?'); insert into tdup1 values (2, '银屑病怎么治疗?'); insert into tdup1 values (3, '银屑病怎么治疗好?'); insert into tdup1 values (4, '银屑病怎么能治疗好?'); 这两种分词插件,可以任选一种。 postgres=# select to_tsvector('jiebacfg', info),* from tdup1 ; to_tsvector | id | info ---------------------+----+---------------------- '治':3 '银屑病':1 | 1 | 银屑病怎么治? '治疗':3 '银屑病':1 | 2 | 银屑病怎么治疗? '治疗':3 '银屑病':1 | 3 | 银屑病怎么治疗好? '治疗':4 '银屑病':1 | 4 | 银屑病怎么能治疗好? (4 rows) postgres=# select to_tsvector('scwscfg', info),* from tdup1 ; to_tsvector | id | info -----------------------------------+----+---------------------- '治':2 '银屑病':1 | 1 | 银屑病怎么治? '治疗':2 '银屑病':1 | 2 | 银屑病怎么治疗? '好':3 '治疗':2 '银屑病':1 | 3 | 银屑病怎么治疗好? '好':4 '治疗':3 '能':2 '银屑病':1 | 4 | 银屑病怎么能治疗好? (4 rows) 创建三个函数, 计算2个数组的集合(去重后的集合) postgres=# create or replace function array_union(text[], text[]) returns text[] as $$ select array_agg(c1) from (select c1 from unnest($1||$2) t(c1) group by c1) t; $$ language sql strict; CREATE FUNCTION 数组去重 postgres=# create or replace function array_dist(text[]) returns text[] as $$ select array_agg(c1) from (select c1 from unnest($1) t(c1) group by c1) t; $$ language sql strict; CREATE FUNCTION 计算两个数组的重叠部分(去重后的重叠部分) postgres=# create or replace function array_share(text[], text[]) returns text[] as $$ select array_agg(unnest) from (select unnest($1) intersect select unnest($2) group by 1) t; $$ language sql strict; CREATE FUNCTION 笛卡尔结果是这样的: regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:d+)', '', 'g')),' ') 用于将info转换成数组。 postgres=# with t(c1,c2,c3) as (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) select * from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) simulate from t t1,t t2) t; t1c1 | t2c1 | t1c2 | t2c2 | t1c3 | t2c3 | simulate ------+------+----------------------+----------------------+-------------------+-------------------+---------- 1 | 1 | 银屑病怎么治? | 银屑病怎么治? | {'银屑病','治'} | {'银屑病','治'} | 1.00 1 | 2 | 银屑病怎么治? | 银屑病怎么治疗? | {'银屑病','治'} | {'银屑病','治疗'} | 0.33 1 | 3 | 银屑病怎么治? | 银屑病怎么治疗好? | {'银屑病','治'} | {'银屑病','治疗'} | 0.33 1 | 4 | 银屑病怎么治? | 银屑病怎么能治疗好? | {'银屑病','治'} | {'银屑病','治疗'} | 0.33 2 | 1 | 银屑病怎么治疗? | 银屑病怎么治? | {'银屑病','治疗'} | {'银屑病','治'} | 0.33 2 | 2 | 银屑病怎么治疗? | 银屑病怎么治疗? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 2 | 3 | 银屑病怎么治疗? | 银屑病怎么治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 2 | 4 | 银屑病怎么治疗? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 3 | 1 | 银屑病怎么治疗好? | 银屑病怎么治? | {'银屑病','治疗'} | {'银屑病','治'} | 0.33 3 | 2 | 银屑病怎么治疗好? | 银屑病怎么治疗? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 3 | 3 | 银屑病怎么治疗好? | 银屑病怎么治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 3 | 4 | 银屑病怎么治疗好? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 4 | 1 | 银屑病怎么能治疗好? | 银屑病怎么治? | {'银屑病','治疗'} | {'银屑病','治'} | 0.33 4 | 2 | 银屑病怎么能治疗好? | 银屑病怎么治疗? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 4 | 3 | 银屑病怎么能治疗好? | 银屑病怎么治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 4 | 4 | 银屑病怎么能治疗好? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 (16 rows) 以上生成的实际上是一个矩阵,simulate就是矩阵中我们需要计算的相似度: 我们在去重计算时不需要所有的笛卡尔积,只需要这个矩阵对角线的上部分或下部分数据即可。 所以加个条件就能完成。 postgres=# with t(c1,c2,c3) as (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) select * from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) simulate from t t1,t t2 where t1.c1<>t2.c1 and t1.c1<t2.c1) t; t1c1 | t2c1 | t1c2 | t2c2 | t1c3 | t2c3 | simulate ------+------+--------------------+----------------------+-------------------+-------------------+---------- 1 | 2 | 银屑病怎么治? | 银屑病怎么治疗? | {'银屑病','治'} | {'银屑病','治疗'} | 0.33 1 | 3 | 银屑病怎么治? | 银屑病怎么治疗好? | {'银屑病','治'} | {'银屑病','治疗'} | 0.33 1 | 4 | 银屑病怎么治? | 银屑病怎么能治疗好? | {'银屑病','治'} | {'银屑病','治疗'} | 0.33 2 | 3 | 银屑病怎么治疗? | 银屑病怎么治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 2 | 4 | 银屑病怎么治疗? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 3 | 4 | 银屑病怎么治疗好? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 (6 rows) 开始对这些数据去重,去重的第一步,明确simulate, 例如相似度大于0.5的,需要去重。 postgres=# with t(c1,c2,c3) as (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) select * from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) simulate from t t1,t t2 where t1.c1<>t2.c1 and t1.c1<t2.c1) t where simulate>0.5; t1c1 | t2c1 | t1c2 | t2c2 | t1c3 | t2c3 | simulate ------+------+--------------------+----------------------+-------------------+-------------------+---------- 2 | 3 | 银屑病怎么治疗? | 银屑病怎么治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 2 | 4 | 银屑病怎么治疗? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 3 | 4 | 银屑病怎么治疗好? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 (3 rows) 去重第二步,将t2c1列的ID对应的记录删掉即可。 delete from tdup1 where id in (with t(c1,c2,c3) as (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) select t2c1 from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) simulate from t t1,t t2 where t1.c1<>t2.c1 and t1.c1<t2.c1) t where simulate>0.5); 例如 : postgres=# insert into tdup1 values (11, '白血病怎么治?'); INSERT 0 1 postgres=# insert into tdup1 values (22, '白血病怎么治疗?'); INSERT 0 1 postgres=# insert into tdup1 values (13, '白血病怎么治疗好?'); INSERT 0 1 postgres=# insert into tdup1 values (24, '白血病怎么能治疗好?'); INSERT 0 1 postgres=# postgres=# with t(c1,c2,c3) as (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) select * from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) simulate from t t1,t t2 where t1.c1<>t2.c1 and t1.c1<t2.c1) t where simulate>0.5; t1c1 | t2c1 | t1c2 | t2c2 | t1c3 | t2c3 | simulate ------+------+--------------------+----------------------+-------------------+-------------------+---------- 2 | 3 | 银屑病怎么治疗? | 银屑病怎么治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 2 | 4 | 银屑病怎么治疗? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 3 | 4 | 银屑病怎么治疗好? | 银屑病怎么能治疗好? | {'银屑病','治疗'} | {'银屑病','治疗'} | 1.00 22 | 24 | 白血病怎么治疗? | 白血病怎么能治疗好? | {'治疗','白血病'} | {'治疗','白血病'} | 1.00 13 | 22 | 白血病怎么治疗好? | 白血病怎么治疗? | {'治疗','白血病'} | {'治疗','白血病'} | 1.00 13 | 24 | 白血病怎么治疗好? | 白血病怎么能治疗好? | {'治疗','白血病'} | {'治疗','白血病'} | 1.00 (6 rows) postgres=# begin; BEGIN postgres=# delete from tdup1 where id in (with t(c1,c2,c3) as postgres(# (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) postgres(# select t2c1 from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) postgres(# simulate from t t1,t t2 where t1.c1<>t2.c1 and t1.c1<t2.c1) t where simulate>0.5); DELETE 4 postgres=# select * from tdup1 ; id | info ----+-------------------- 1 | 银屑病怎么治? 2 | 银屑病怎么治疗? 11 | 白血病怎么治? 13 | 白血病怎么治疗好? (4 rows) 用数据库解会遇到的问题, 因为我们的JOIN filter是<>和<,用不上hashjoin。 数据量比较大的情况下,耗时会非常的长。 postgres=# explain delete from tdup1 where id in (with t(c1,c2,c3) as (select id,info,array_dist(regexp_split_to_array((regexp_replace(to_tsvector('jiebacfg',info)::text,'(:\d+)', '', 'g')),' ')) from tdup1) select t2c1 from (select t1.c1 t1c1,t2.c1 t2c1,t1.c2 t1c2,t2.c2 t2c2,t1.c3 t1c3,t2.c3 t2c3,round(array_length(array_share(t1.c3,t2.c3),1)::numeric/array_length(array_union(t1.c3,t2.c3),1),2) simulate from t t1,t t2 where t1.c1<>t2.c1 and t1.c1<t2.c1) t where simulate>0.5); QUERY PLAN ---------------------------------------------------------------------------------------------------------------------- Delete on tdup1 (cost=10005260133.58..10005260215.84 rows=2555 width=34) -> Hash Join (cost=10005260133.58..10005260215.84 rows=2555 width=34) Hash Cond: (tdup1.id = "ANY_subquery".t2c1) -> Seq Scan on tdup1 (cost=0.00..61.10 rows=5110 width=10) -> Hash (cost=10005260131.08..10005260131.08 rows=200 width=32) -> HashAggregate (cost=10005260129.08..10005260131.08 rows=200 width=32) Group Key: "ANY_subquery".t2c1 -> Subquery Scan on "ANY_subquery" (cost=10000002667.20..10005252911.99 rows=2886838 width=32) -> Subquery Scan on t (cost=10000002667.20..10005224043.61 rows=2886838 width=4) Filter: (t.simulate > 0.5) CTE t -> Seq Scan on tdup1 tdup1_1 (cost=0.00..2667.20 rows=5110 width=36) -> Nested Loop (cost=10000000000.00..10005113119.99 rows=8660513 width=68) Join Filter: ((t1.c1 <> t2.c1) AND (t1.c1 < t2.c1)) -> CTE Scan on t t1 (cost=0.00..102.20 rows=5110 width=36) -> CTE Scan on t t2 (cost=0.00..102.20 rows=5110 width=36) (16 rows) 其他更优雅的方法,使用PLR或者R进行矩阵运算,得出结果后再进行筛选。 PLR R 或者使用MPP数据库例如Greenplum加上R和madlib可以对非常庞大的数据进行处理。 MADLIB MPP 小结 这里用到了PG的什么特性? .1. 中文分词 .2. 窗口查询功能 (本例中没有用到,但是如果你的数据没有主键时,则需要用ctid和row_number来定位到一条唯一记录)

德哥 2019-12-02 01:43:06 0 浏览量 回答数 0

问题

Eclipse Xtend对Java说:我帮你瘦身:报错

kun坤 2020-06-09 15:18:52 3 浏览量 回答数 1

问题

XForms – 新的 Web 表单标准:报错

kun坤 2020-06-07 13:33:13 0 浏览量 回答数 1

问题

【精品问答】Java必备核心知识1000+(附源码)

问问小秘 2019-12-01 22:00:28 870 浏览量 回答数 1

问题

程序员报错QA大分享(1)

问问小秘 2020-06-18 15:46:14 8 浏览量 回答数 1

问题

Nginx性能为什么如此吊

小柒2012 2019-12-01 21:20:47 15038 浏览量 回答数 3

问题

在Eclipse中配置Heritrix HTTP ERROR 403.10 禁止访问:配置无效

kun坤 2020-05-27 20:05:38 7 浏览量 回答数 1

问题

应用 AXIS 开始 Web 服务之旅:报错

kun坤 2020-06-08 11:01:46 3 浏览量 回答数 1

问题

OSS如何实现防盗链?

青衫无名 2019-12-01 21:38:55 2491 浏览量 回答数 0

回答

首先“缓存”Cache这个东西是干什么的,我们应该先有些基本的了解。要是不太明白的可以看看网上的解释:http://baike.baidu.com/view/907.htm 简单讲,阿里云OCS提供的功能就是提供对热点数据的高速访问。在使用OCS之前(或者在使用任何一种缓存服务之前),我们都应该明白关于缓存的这么几点: 缓存里的数据不是持久化保存的,也就是说它像是电脑里的内存,而不像硬盘;我们不能指望OCS里的数据一直保存不丢失。如果你真的需要存储持久化的数据,也许你应该出门左转找阿里云OSS(开发存储服务); 缓存里存的应该是“热点”数据。遵循常常出现的“20-80法则”,通常程序应用中都有一定比例的数据常常被请求访问,这就是所谓的热点数据,OCS正是为这种数据设计存在的。假定我们的程序中有100个数据,每次访问这些数据的概率完全是均匀分布的1/100,那么使用缓存的效果就不会太好,因为这其中不存在热点数据。 数据逐出。我们可以决定哪些数据是热点数据被放到缓存当中,但是如果我们的缓存容量不够大,这些热点数据中某些最近较少被用到的数据还是会被“挤出去”,这种行为叫做数据逐出。如果想减少出现这种情况,我们可以购买更高容量的OCS。 -------------------------         在开始使用之前,关于阿里云OCS,我们还需要知道以下这些事: 阿里云OCS仅支持阿里云内网访问,不支持公网访问。也就是说,我们用办公室或者家里的电脑(都属于公网)是无法连上阿里云OCS的。为什么会这样呢?因为缓存服务的根本目标是要提供低延迟的高速访问,而从公网电脑来连接OCS服务器的场景下,公网的网络环境是不可控的,可能出现延迟很高甚至断连接的情况,这使得缓存服务无法保证“高速、低延迟”的基本特性,所以阿里云OCS是不支持公网直接访问的。如果觉得高延迟的情况对于我们的应用也能接受,那么我们应该去选择阿里云其他的产品(比如OSS开放存储服务),而不应该选择OCS缓存服务。 阿里云OCS需要与ECS(阿里云服务器)配合使用,而且只能与本地区节点的ECS连通。这一点与上一条相关。OCS只能从阿里云内网访问,也就是说我们只能从阿里云ECS上才能访问并使用OCS服务。所以我们在官网购买OCS的时候,会看到提示信息说需要至少有一台ECS才能买OCS。另外,阿里云ECS是分地区节点的,比如北京、杭州、青岛等,我们在购买OCS缓存的时候也要选相应的地区节点。北京的ECS只能访问北京的OCS,而不能访问杭州或青岛的OCS。 阿里云OCS是按购买量收费的,而不是按使用量收费。这点需要提醒新同学们注意,在我们购买了OCS缓存之后,计费就已经开始了,即使我们还没有真正使用缓存。也就是说,我们买了1G的OCS缓存后,即使目前使用量为0,系统也会按照1G的标准来计费。所以我们在购买OCS的时候,要选取适合我们业务数据需要的缓存档位。当然了,阿里云OCS也提供在线升降缓存容量的功能。也就是说,如果我们在使用了一段时间之后,发现购买的OCS缓存不够用了(或者缓存使用量太低),我们可以在线的对已有的OCS实例进行升档(或者降档),而OCS缓存服务不会被中断。 阿里云OCS对于存贮的对象大小是有限制的。缓存通常对其内部存储的数据尺寸是有限制的,阿里云OCS也一样。目前OCS支持存储的数据对象的上限是1,000,000Byte。如果要存的值超过这个限制,我们应该考虑把数据压缩,或从逻辑上分成不同键存储的几个值。 ------------------------- 现在我们开始在阿里云官网上购买OCS实例  http://buy.aliyun.com/ocs  首先我们需要已经有了一台阿里云ECS,否则我们无法在这个页面成功购买OCS。购买的第一步,我们先要确定选择买哪个地区的OCS;这个很重要,如上面所说,如果我们的ECS是属于北京,而我们在这里购买了杭州的OCS,那么这两者是无法配合协同工作的。所以,在购买OCS的时候一定要选择应用服务器ECS所在地区的OCS。下一步是要选择OCS缓存容量。我们要购买多大的缓存,这个取决于我们对自身业务应用中热点数据总量大小的判断。如果一时难以准确判断数据量,也不用担心:我们可以先买一个大致容量的OCS(比如1GB),随后在使用过程中,通过OCS控制台提供的监控功能,我们可以了解到目前OCS缓存的使用量等数据,然后可以自主的调整所需的缓存量,购买更大的缓存(比如升到5GB)或者减少已购的缓存量(比如降到512MB),阿里云会根据我们选择的新配置来调整对应的收费。此外在选择缓存容量的时候,要知道不同容量的缓存档位对应着不同的性能配额,具体来说包括两个指标:吞吐量带宽与每秒请求处理数(QPS)。比如以现在的配额标准,1GB的OCS缓存对应5MB/sec的吞吐量带宽和3000次/sec的请求处理峰值。当我们使用OCS的时候,如果数据量传输的带宽超过了5MB/s, 或者每秒的请求数超过了3000次,都会触发性能配额控制机制,导致某些请求无法返回正常结果。在确定了地区和缓存容量之后,我们就可以直接下单购买OCS了。 ------------------------- 在成功购买OCS之后,我们的联系邮箱和手机都会收到OCS创建成功的通知,里面会包括OCS的实例ID和初始密码(关于密码的用处后面会讲到)。我们现在登录OCS控制台, http://ocs.console.aliyun.com/ 就可以看到已经购买到的OCS实例列表。在列表页面上对应OCS实例的后面点击“管理”,就可以进入该OCS实例的详情页,看到更多的详细信息。 ------------------------- 我们现在已经有了一个OCS缓存实例,现在是时候试玩OCS了。要使用OCS就要写一点程序代码,不过不用担心,我们在这里采用“Happy-Path”的方法,从最简单的操作开始,让新上手的菜鸟们能马上就有一个能调用OCS缓存服务的程序。OCS提供缓存服务,它并不要求我们的程序是哪种语言来写的。我们这里先以Java程序为例,写一个最简单的“Hello World”。(其他编程语言的例子,我们随后附上。)第一步,登录你的阿里云ECS服务器,在上面安装Java JDK和你常用的IDE(比如Eclipse)。一定要记得我们之前说过的,只有在阿里云内网的ECS服务器上,才能访问我们的OCS实例。所以,用家里或是公司的电脑执行下面的代码示例是看不到结果的。 Java JDK和Eclipse都很容易从网上找到下载,比如 http://download.eclipse.org/ 或者 http://www.onlinedown.net/soft/32289.htm 第二步,在把Java开发环境准备好了之后,下载第一个代码示例(Sample-Code-1第三步,在Eclipse里面打开刚下载的OcsSample1.java,我们要根据自己的OCS实例信息修改几个地方。        我们每个人买到的OCS实例的ID都是不重复的,其对应的阿里云内网地址也是独一无二的,这些信息都在OCS控制台上显示出来。我们在同自己的OCS实例建立连接的时候,需要根据这些信息修改OcsSample1.java中的对应地方。         public static void main(String[] args) {                                        final String host = "b2fd2f89f49f11e3.m.cnqdalicm9pub001.ocs.aliyuncs.com"; //控制台上的“内网地址”                   final String port ="11211";       //默认端口 11211,不用改                   final String username = "b2fd2f89f49f11e3"; //控制台上的“访问账号”                   final String password = "my_password"; //邮件或短信中提供的“密码”                   …… …… ……       信息修改完毕,我们可以运行自己的程序了。运行main函数,我们会在Eclipse下面的console窗口看到下面这样的结果(请忽略可能出现的红色INFO调试信息): OCS Sample CodeSet操作完成!Get操作: Open Cache Service,  from www.Aliyun.com     OK,搞定!我们已经成功的连接上了阿里云的OCS并且调用缓存服务成功,就这么简单。-------------------------我们已经成功运行了第一个调用阿里云OCS缓存服务的Sample程序OcsSample1.java,现在我们看看这个程序里都做了什么。                                  …… …… ……                            System.out.println("OCS Sample Code");                                                        //向OCS中存一个key为"ocs"的数据,便于后面验证读取数据,                             //这个数据对应的value是字符串 Open Cache Service,  from www.Aliyun.com                            OperationFuture future = cache.set("ocs", 1000," Open Cache Service,  from www.Aliyun.com");                            //向OCS中存若干个数据,随后可以在OCS控制台监控上看到统计信息                            for(int i=0;i<100;i++){                                String key="key-"+i;                                String value="value-"+i;                                 //执行set操作,向缓存中存数据                                cache.set(key, 1000, value);                            }                             System.out.println("Set操作完成!");                             future.get();  //  确保之前(cache.set())操作已经结束                         //执行get操作,从缓存中读数据,读取key为"ocs"的数据                            System.out.println("Get操作:"+cache.get("ocs"));                            …… …… …… 从这些代码中可以看出: 1. 我们在建立与OCS缓存服务器的连接后,先是向缓存中存(set)了一个“key-value”(键值对)形式的数据,这个数据的key是字符串“ocs”,其对应的value也是字符串;2. 接着我们继续向缓存中存(set)了100个其他简单的“key-value”数据。3. 最后我们进行功能验证。根据之前给定的key,从缓存中获取(get)其对应的value:也就是输入字符串“ocs”,缓存给我们返回value对应的字符串。 以上的步骤中,1与3是相对应的,我们只有先向缓存中set了某个数据,后面才能从缓存中get到这个数据。步骤2中程序向缓存set了100个数据,是为了从另一个方面进行验证。我们回到阿里云OCS控制台,打开“实例详情”页,在“实例监控”的部分点击刷新,会看到其中一些监控项的值已经发生了变化(注:监控信息的刷新可能存在数秒的延迟), 其中的“Key的个数”已经变成了101,也就是说我们程序已经成功地向OCS缓存中存放了101个数据。-------------------------在写下一篇技术贴之前,列一些OCS用户在入门时问到的问题,方便其他刚认识OCS的同学:Question:买了1G的OCS,那就相当于这个1G是专门缓存用的,与ECS服务器的内存没关系是吧~Answer:是的,OCS的缓存容量与您ECS的内存容量是没关系的。Question:OCS 外网测试,怎么连接?有没有外网连接地址哦?Answer:OCS是不能从外网访问的。参照上面的文章。Question:我之前那个OCS可以正常使用,但现在换了一个OCS就不行了,怎么回事?Answer:经核实您的主机是属于杭州节点的,而现在这个OCS是青岛节点的,不同地域之间的产品内网不互通。Question:在设置一个value时,如果指定过期时间为0,会永久保留吗?Answer:指定过期时间为0,OCS就认为此数据不根据过期时间发生淘汰;但是,此数据仍有可能基于LRU被其他数据淘汰,或者由内存清理造成丢失 ,因此不能认为这个value会永久保留。 Question:对OCS的访问是否需要负载均衡? Answer:不需要。对访问请求的负载均衡都是在OCS服务器端来进行的,用户直接使用缓存服务即可,不用考虑负载均衡的事情。 Question:OCS是否会主动关闭闲置的连接? 如果会,请问连接闲置多久会被关闭?Answer:OCS不会主动关闭闲置的用户连接。但是用户的环境如果使用了SLB,则需要参考SLB连接关闭时间。Question:如何设置数据在OCS缓存中的过期时间 ?Answer:关于设置缓存数据的过期时间,可以参考Memcached官方说明: https://code.google.com/p/memcached/wiki/NewCommands An expiration time, in seconds. Can be up to 30 days. After 30 days, is treated as a unix timestamp of an exact date. 翻译过来就是:0~2592000表示从当前时刻算起的时间长度(以秒计算,最长2592000即30天);大于2592000表示UNIX时间戳。 此值设置为0表明此数据不会主动过期。------------------------- 回 12楼(村里一把手) 的帖子 谢谢,要让大家用得好才算数。 -------------------------缓存与数据库相结合使用,是常见的一种应用搭配场景。现在我们再看一个例子,是用OCS搭配MySQL数据库使用。Java示例代码在此(这个示例代码中,大部分与前几个例子类似。因为要与数据库结合,所以程序需要依赖一个JDBC的jar包才能运行。支持MySQL的JDBC jar包在此(在程序中添加MySQL数据库的连接信息:     …… …… ……            // JDBC driver name and database URL    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";    static final String DB_URL = "jdbc:mysql://xxxxxxx.mysql.rds.aliyuncs.com/testdb"; //MySQL数据库URL        //  Database用户名及密码    static final String DB_USER = "xxxxxx";    static final String DB_PASS = "xxxxxx";            我们设想这样一个场景:我们需要从数据库的tableone表中查找区域不属于北京的记录总数,用SQL表示就是:SELECT count(*)  FROM testdb.tableone where region != 'beijing'假定这个表中的数据如下,则这条SQL查询返回的结果就是7:如果这个查询被调用到的频率很高,多个用户反复不断的在数据库中查这个数据,我们就可以把这个查询结果放到OCS缓存中去。看下面的代码片段,我们用for循环模拟用户连续20次在数据库中查询上述SQL语句:              for (int i = 1; i <= 20; i++) {                String sql = "SELECT count(*)  FROM testdb.tableone where region != 'beijing'";                String key ="non-beijing"; //给SQL语句自定义一个key                //在OCS缓存里按key查找               String value =  (String) cache.get(key);                                if (value == null) {                    // 在OCS缓存里没有命中                    // step 1:从My SQL数据库中查询                    //Load MySQL Driver                      Class.forName(JDBC_DRIVER);                     con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);                    ps = con.prepareStatement(sql);                    ResultSet result = ps.executeQuery(sql);                    result.next();                                        value=result.getString(1);                    System.out.println("从MySQL中查询数据.  Key= "+key+" Value="+value);                                       // step 2: 把数据库返回的数据作为value存放到OCS缓存中去                    cache.set(key, EXPIRE_TIME, value);                                    } else {                    // 在OCS缓存里命中                    System.out.println("从OCS中读取数据.     Key= "+key+" Value="+value);                }                            }// end of for在这段代码中我们可以看到,我们给这条SQL语句标记了一个key,当有用户要执行这条SQL的时候,我们首先按照key在OCS缓存中查找:如果没有对应的缓存数据,则连接MySQL数据库执行SQL查询,把结果返回给用户,并把这个查询结果存到OCS缓存中去;如果OCS中已经有了对应的缓存数据,则直接把缓存数据返回给用户。运行结果如下: 从MySQL中查询数据.  Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7从OCS中读取数据.     Key= non-beijing, Value=7…… …… 从结果可以看出,程序第1次是从MySQL数据库当中查询数据,后面的19次都是从OCS缓存中获取key对应的value直接返回。也就是说,OCS降低了程序去连接MySQL数据库执行SQL查询的次数,减轻了对数据库的负载压力。用户对热点数据访问的频率越高,OCS的这种优势就越明显。

唐翰 2019-12-01 23:41:23 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站