阿里巴巴产品7星优化

如何优化阿里巴巴产品到7星或100%质量,这是很多运营阿里的人所需要了解的一件事情.

今天就根据阿里的情况来简单讲一下如何来做:

1.视频上传

按要求上传产品视频到主图和详情页各一条.

视频内容可以是产品展示,也可以是企业展示.目前阿里系统是不检测视频的内容的.

只有访客才会对你的视频内容观看.

视频数量有限制,大家可以用一条视频关联多个产品.这样就能解决视频不足的问题.

2.图片上传

2.1主图的尺寸是硬要求,需800*800以上.建议这个尺寸就行.

至于图片的内容,当然是产品的六视图,场景图,卖点提炼图,促销图等.

至少要一张白底的主图.

2.2详情页的图片

建议多张图(10张图以上)配文字(300字以上).

自己用阿里的工具点一下检测,看评分就知道结果了.

对应调整.

有人说,文字不足怎么办,可以写公司相关文字介绍充数.

3.属性填写

把能填写的属性都填上.

不是必填的也填上.

要按实际情况填写.

4.关联推荐

尽可能的关联主推产品和相关产品.

5.买家保障

买家保障按实际情况选择,最好是按自己的实力尽可能的都加上.

6.在线支付

能用在线支付的,最好使用.

7.其他的一些方便买家的内容都使用上.

以上几点适应于中英文阿里巴巴,各类电商平台.

最重要的一点,是按平台的要求来做,在规则内展示自己产品和企业实力.

结合图文视频等素材,让客户能通过这些内容完全了解产品和卖点.

PHP随机订单号随机用户名账号的生成

来源:https://www.cnblogs.com/wangyk517/p/5816781.html

随机生成难点是在于如何避免碰撞,有人说用md5,GUID这些机制啊,当然可以,但是做为账号,看着有乱,而且生成位数也过长。

本方法只需要解决1秒内的并发碰撞就可以,因为固定头部采用的是unixtime时间,精确到秒,超过1秒,这个头部的时间肯定变化了。同时本方法也可以用户随机订单编号的生成。

测试条件是用循环创建1万个随机账号(毫秒级),0碰撞,10万个大约有0-3个碰撞。应该没有哪个互联网公司会在瞬间同时创建这么多账号,所以足够应付数十亿PV这么大的规模了。

// 自动生成随机用户名
// 测试,循环创建1万个随机账号,0碰撞,10万大约0-3个碰撞,足够应付未来数十亿级PV
private function genUserNumber()
{
	$chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	$username = "";
	for ( $i = 0; $i < 6; $i++ )
	{
		$username .= $chars[mt_rand(0, strlen($chars))];
	}
	return strtoupper(base_convert(time() - 1420070400, 10, 36)).$username;
}

 

 

php 处理上百万条的数据库如何提高处理查询速度

来源:https://www.jb51.net/article/22063.htm

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
6.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
若要提高效率,可以考虑全文检索。
7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num
8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30'生成的id
应改为:
select id from t where name like 'abc%'
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'
10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
12.不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(...)
13.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。
17.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。
21.避免频繁创建和删除临时表,以减少系统表资源的消耗。
22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。
23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。
29.尽量避免大事务操作,提高系统并发能力。
30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

PHP检查有效期函数

PHP检查有效期函数主要用于网站定时更新,会员有效期设定,订单有效设定等场景.

/*检查是否到期
*可以只传一个日期参数(YYYY-MM-DD H:i:s),和当前时间比对:主要用于定时更新状态等场景
*或者添加一个日期和相差时长,支持年,月,周,日,时,分,秒:主要用于会员时长,订单有效期等固定期限的场景
*ii_check_expireDate('2020-12-01 10:10:10')
*ii_check_expireDate('2020-11-30 13:50:10','5','5')
*/

function ii_check_expireDate($date,$add='0',$type='0'){
$bool = false;
$tnow = strtotime(ii_now());
$tdate = strtotime($date);
switch($type){
case 0:
$edate = strtotime("+".$add." years",$tdate);
break;
case 1:
$edate = strtotime("+".$add." months",$tdate);
break;
case 2:
$edate = strtotime("+".$add." week",$tdate);
break;
case 3:
$edate = strtotime("+".$add." days",$tdate);
break;
case 4:
$edate = strtotime("+".$add." hours",$tdate);
break;
case 5:
$edate = strtotime("+".$add." minutes",$tdate);
break;
case 6:
$edate = strtotime("+".$add." seconds",$tdate);
break;
default:
$edate = strtotime($tdate);
break;
}
if(date('Y-m-d H:i:s',$tnow) >= date('Y-m-d H:i:s',$edate)) $bool = true;
return $bool;
}

 

 

 

 

 

数据库EAV模型

EAV(Entity–Attribute–Value,实体-属性-值),一种数据库模型,使用eav建模的好处是可以动态为数据模型增加或移除属性。

 

MySQL必须知道的点!

转自Mysql必须知道的点!_架构之美

MySQL已经成为世界上最受欢迎的数据库管理系统之一,无论是用在小型开发项目上,还是用在构建那较大型的网站,MySQL都用实力证明了自己是一个稳定、可靠、快速、可信的系统,足以胜任任何数据存储业务的需要。

使用过程中,这些点你都知道吗?
1.必须使用InnoDB存储引擎
有更好的CPU和IO性能,更好的备份和锁表机制,提高统计和调试效率。
另外,作为一 个系统,InnoDB支持多种关键功能,其中最重要的是事务日志和行级锁。事务日志记录真正的数据库事务,但更重要的是数据崩溃恢复和回滚。
基于 InooDB方式的IO,能给予更安全数据保护和更好性能表现。另外,在大多数的情况下,行级锁可以提供更高的并发性能,因为用户只锁定他们正在写的数据,而读数据永远不会被阻塞 。
2.数据表、数据字段必须加入中文注释
方便日后新人小哥,更快理解熟悉;并且可读性更好。同时在status这类字段上标注:0表示删除,1表示正常 等枚举值。
3.必须使用UTF8mb4字符集
utf8是通用的字符集,mb4 在utf8上进行了扩展,支持emoj等新的字符。
4.禁止使用存储过程、视图、触发器、Event、join等
高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,数据库擅长存储与索引,CPU计算在业务层更合理。5.禁止存储大文件或者大照片
当人员照片较多时,分页查询速度明显变慢,之前1秒内响应,加了照片字段后,需要4~5秒左右才能响应。
大文件和照片存储在文件系统,数据库里存URI更好
6.表必须有主键,例如自增主键
a)主键递增,数据行写入可以提高插入性能,可以避免Page分裂,减少表碎片提升空间和内存的使用。
b)使用数字类型主键,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率。
c)无主键的表删除,在ROW模式的主从架构,会导致备库夯住。
d)  更多使用业务主键,在分库分表会有更多便利性。
7.禁止使用外键,如果有外键完整性约束,需要应用程序控制
外键会导致表与表之间耦合,Update与Delete操作都会涉及相关联的表,十分影响SQL的性能,甚至会造成死锁。8.必须把字段定义为NOT NULL并且提供默认值
a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化。
b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多。
c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识。
d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。
如:where name!=’nx’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录。9.禁止使用TEXT、BLOB类型
会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能。10.禁止使用小数存储货币
使用整数吧,小数容易导致钱对不上。11.必须使用varchar(20)存储手机号
a)涉及到区号或者国家代号,可能出现+-()
b)手机号会去做数学运算么?
c)varchar可以支持模糊查询,例如:like“138%”12.禁止使用ENUM,可使用TINYINT代替
a)增加新的ENUM值要做DDL操作
b)ENUM的内部实际存储就是整数,你以为自己定义的是字符串?13.关于索引设计
(1)单表索引建议控制在5个以内
索引并不是越多越好!索引可以提高效率同样可以降低效率。
索引可以增加查询效率,但同样也会降低插入和更新的效率,甚至有些情况下会降低查询效率。
因为MySQL优化器在选择如何优化查询时,会根据统一信息,对每一个可以用到的索引来进行评估,以生成出一个最好的执行计划,如果同时有很多个索引都可以用于查询,就会增加MySQL优化器生成执行计划的时间,同样会降低查询性能。
(2)禁止在更新十分频繁、区分度不高的属性上建立索引
a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能
b)“性别”这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似(3)建立组合索引,必须把区分度高的字段放在前面
理由:能够更加有效的过滤数据14.关于SQL使用规范
(1)禁止使用INSERT INTO t_xxx VALUES(xxx),必须显示指定插入的列属性
理由:容易在增加或者删除字段后出现程序BUG(2)禁止在WHERE条件的属性上使用函数或者表达式
理由:SELECT uid FROM t_user WHERE from_unixtime(day)>='2019-10-09' 会导致全表扫描
正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2019-10-09 00:00:00')(3)禁止负向查询,以及%开头的模糊查询
理由:
a)负向查询条件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描
b)%开头的模糊查询,会导致全表扫描(4)禁止大表使用JOIN查询,禁止大表使用子查询
理由:会产生临时表,消耗较多内存与CPU,极大影响数据库性能(5)禁止使用OR条件,必须改为IN查询
理由:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢?(6)应用程序必须捕获SQL异常,并有相应处理

JTBC5.0发布在即,JTBC官网展示各版本开源协议

始于2006年大学校园的知名CMS程序JTBC,近期在官网更新了相关介绍,同时展示了各历史版本和即将于2021年发布的5.0版本的开源协议.

大家来一起看一下吧.

 

JTBC网站内容管理系统

JTBC 是一套有15年历史的模块化网站系统核心。
JTBC 采用 语言/代码/程序 两两分离的技术模式。
JTBC 遵循大道至简原则,崇尚开源与工匠精神,承诺永久免费。

协议链接:https://www.jtbc.cn/license/

相关图片

 

 

同时,官方服务也进行了全新变动,现已支持语音支持服务,如果您工作日有什么困扰,可以尝试购买金牌会员获取工作日5*8小时的贴心服务.

全新服务价格对比如下:

Google自定义搜索引擎

Google自定义搜索引擎是通过谷歌搜索提供的api接口来获取指定网站的搜索结果.然后通过相关前后端技术来输出获取的结果,这样就可以实现类似网盘资源搜索这类专门针对指定网址进行搜索的服务.

网址: https://programmablesearchengine.google.com/

通过谷歌提供的格式,我们可以添加多个网址

如图

 

您可以添加以下任意内容:

  • 单个网页:www.example.com/page.html
  • 整个网站:www.mysite.com/*
  • 网站的某些部分:www.example.com/docs/* 或 www.example.com/docs/
  • 整个域:*.example.com

按需要进行设置

点击创建就可以获取代码部署到自己的网站了.

 

 

然后可以对创建的搜索引擎进行设置更多内容.

 

 

这样我们就可以设置自己的特定搜索引擎了.

需要注意:

你放置的主机或服务器本身需可以访问谷歌搜索.(通过香港或国外主机服务器都可以).

 

这个谷歌搜索引擎的作用很多.

像搜索视频网站,搜索图片网站,搜索资讯网站,都可以把相关网址统一到一个里面,来自定义搜索引擎.

另外,也可以把商城类网站统一到一起,然后通过代码来处理输出的数据,实现佣金赚取等功能.

同时,也可以通过搜索引擎来搜索一些会员服务(有很多网站针对搜索引擎展现的内容和用户看到的不一样).

 

通过谷歌提供的公开网址,我们可以进行搜索,这个结果和部署到自己网站的结果是一样的.

只是这个要能访问谷歌才可以.

nextcloud报错"Internal Server Error"的解决方法

在使用nextcloud过程中,突然出现"Internal Server Error"错误,提示如下:

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

通过查找原因,最后有两种解决方法:

1.安装APCu扩展

2.清空数据表oc_filecache数据

通过方法2解决了我的问题.

 

 

 

Gif录屏软件收集

GifCam (Gif相机) 是一款免费且非常优秀的视频录制/剪辑的GIF动画制作软件.

使用简单,每次录屏前记得要新建,不然他会一直连续录制(中间停止只是暂停).

网盘下载: http://share.menglei.net/file/16922972-471790637

注意:本次提供的为GifCam6.0单文件大眼仔汉化版(杀毒软件会误杀,请自行决定是否使用).

 

Screen to Gif是一款方便可靠的gif动画录制软件,可以用来快速录制屏幕上的指定区域,将其直接保存为GIF动画文件。

功能比较强大,可以对录制的内容进行编辑,还提供画板录制(绘画制作过程),还可以使用摄像头进行录制.比较好的是编辑功能强大.

官方提供安装版和单文件版下载.官方包有中文版(根据系统语言自动支持).

https://www.screentogif.com/