文档章节

垂直电商系统搜索系统设计概要说明

zzuqiang
 zzuqiang
发布于 2016/08/03 09:47
字数 2727
阅读 71
收藏 2

搜索系统项目使用说明

##1.搜索系统使用手册 mall-search-server系统单独部署、独立运行。不依赖其他项目系统。需要访问数据库创建索引和查询分类、品牌信息。创建索引因为需要先查询出数据库中的商品sku结果集(并且包含活动等信息)、因此商品sku越多耗时越久。建议索引创建时间1个小时或者每天凌晨3点。

2.搜索系统lucene索引创建更新等api使用

2.1 索引更新创建基础类接口

com.huaying.mall.search.service.ILuceneIndex
  1. 准备基础数据 public Document createDocumentByBaseData(SearchDataBaseInfo mp) throws Exception;
  2. 批量创建索引信息在指定路径下 public OutputJsonResult<Integer> createIndexByList(List<Document> docs, String indexDir) throws Exception ;
  3. 批量创建索引原始信息在指定路径下(雷同 2 ) public OutputJsonResult<Integer> createIndexByObjectList(List<SearchDataBaseInfo> list, String indexDir) throws Exception ;
  4. 删除单个索引(不建议使用) public OutputJsonResult deleteOneIndex(String uid, String indexDir) throws Exception ;
  5. 删除索引根据条件(具体条件参数请查看luceneAPI) public OutputJsonResult deleteIndex(List<Term> terms, String indexDir) throws Exception;
  6. 更新索引数据(先删除再更新) public OutputJsonResult updateSingleIndex(SearchDataBaseInfo searchDataBaseInfo, String indexDir)throws Exception ;
  7. 批量更新指定条件下的索引文档信息 public int updateIndex(List<Map<Term,Document>> upTerms, String indexDir)throws Exception;
  8. 批量更新索引目录下信息(直接删除索引文件然后创建紧急是 基础索引信息先删除再创建) public OutputJsonResult updateBaseIndexByList(List<SearchDataBaseInfo> mallProduct_list, String indexDir) throws Exception;
  9. 根据查询条件搜索 public List<Document> search(Query query, int n,Sort sort,String indexPath ) throws Exception; ##2.2 搜索系统对外提供接口 com.huaying.mall.api.search.SearchProductService 1.统一查询接口(非高亮显示) public String searchSku(String jsonParam); 2.统一查询接口高亮显示 public String searchSkuHighlight(String jsonParam); 3.商品上架 (运营后台) public String goodsUp(String jsonParam); 4.商品下架 (运营后台) public String goodsDown(String jsonParam); 5.修改商品价格、库存、起订量(供应商变更商品信息vs理论上变更商品的任何信息都需要同步更新索引) public String goodsModify(String jsonParam); 6.活动的开始(活动商品如果多的情况下更新索引会慢) public String actStart(String jsonParam); 7.活动的停止(活动商品如果多的情况下更新索引会慢) public String actStop(String jsonParam); 8.订单创建(对于搜索不太重要因为搜索现在没有展示库存问题) public String orderCreate(String jsonParam); 9.订单取消(对于搜索不太重要因为搜索现在没有展示库存问题) public String orderCancel(String jsonParam); 10.供应商区域变更(第一次审核通过、以后的变更)、要同步查询供应商发布的商品更新索引 public String merAreaModify(String jsonParam); 11.修改sku的库存 public String modifySkuStock(String jsonParam); ##3.搜索系统配置文件注意事项 配置文件是需要特别注意的。配置文件应用到百度配置文件统一管理类详细见 com.huaying.mall.search.disconf.MallSearchServerConf 中需要注意和变动的
    • mallProductIndex 因历史原因此处存储的是有配送商的商家(特殊商家)的商品索引文件目录
    • infoIndexDir 因历史原因此处配置没有使用
    • pagesize 历史原因没有使用
    • returnTopN 每次查询如果不指定返回结果集、自动返回的最大结果集
    • mallOCSKUIndex 多自营商家系统上线后商家系统(有分运营中心)系统的商品索引目录
    • indexTask 不要理会使用默认配置就行
    • COUNTRY_CODE 支持根据区域名称或者code查询(高级特性没有实现)
    • COUNTRY_CITY_NAME 支持根据区域名称或者code查询(高级特性没有实现)
    • COUNTRY_PROVINCE_NAME 支持根据区域名称或者code查询(高级特性没有实现)
    • SEARCH_DATA_PAGE_COUNT 创建索引时从库中获得基础数据的分页条数(越大创建索引的时间越慢)
    • HTML_FORMATTER_START 高亮显示的开始标签
    • HTML_FORMATTER_END 高亮显示的结束标签
    • ACT_SHOW_ONLY_TIME_NOW 活动商品只有在活动时间到时才显示出来活动的标记()

##4.索引基础bean类 如下bean定义:


import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Calendar;

import com.huaying.common.web.utils.StringUtil;

//商品
public class SearchDataBaseInfo implements Serializable {

	private static final long serialVersionUID = 1L;

	private String uid;// 全局唯一标示
	private String id; // 主键ID
	private String catId; // 商品分类ID
	private String catCode; // 商品分类Code
	private String goodsName; // 商品名称
	private String brandId; // 品牌ID
	private String goodsImg; // 商品图片
	private double goodsScore; // 商品评分
	private String goodsDeno; // 计价单位
	private String supplyerName; // 供应商名称, add by caoh at 2015/9/5
	//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
	private String goodsSubtitle; // 商品副标题
	private String goodsNo; // 商品编号
	private String goodSn; // 商品货号
	private String goodsKeywords; // 商品关键词
	private String goodsBrief; // 商品简介
	private String goodsAdded; // 立即上架
	private double goodsPrice; // 销售价【不太重要】
	private String goodsRecom; // 商品推荐
	private String goodsDetailDesc; // 详细介绍
	private String goodsSeoTitle; // SEO_TILE
	private String goodsSeoKeyword; // SEO_KEYWORD
	private String goodsSeoDesc; // SEO_DESC
	private String goodsProm; // 是否促销
	private String goodsInfoInstocksell; // 无库存也可销售
	private String goodsUsecoupon; // 是否允许使用优惠券
	private String goodsCreateName; // 创建人名称
	private Calendar goodsCreateTime; // 创建时间
	private String goodsModifiedName; // 修改人名称
	private Calendar goodsModifiedTime; // 修改时间
	private String goodsDelName; // 删除人名称
	private Calendar goodsDelTime; // 删除时间
	private String goodsDelflag; // 是否删除
	private String isThird; // 是否第三方(1:第三方商家商品 2:B2B商品 0:后台Boss商品)
	private String supplyerId; // 供应商ID(供应商发布商品的时候填写的供应商ID)
	private String supplyerAddr; // 供应商地址, add by caoh at 2015/9/5
	//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
	private String brandName; // 品牌名称, add by caoh at 2015/9/5
	private String catName; // 类型名称, add by caoh at 2015/9/5
	private int salesNum; // 销量, add by caoh at 2015/9/5
	private int commentNum; // 评论数, add by caoh at 2015/9/5
	private double goodsInfoMarketPrice; // 市场价, add by caoh at 2015/9/10
	private double goodsInfoCostPrice; // 实际销售价, add by caoh at 2015/9/10
	private double promotionPrice; // 促销价
	private String promotionChannel;// 促销渠道 by 单品促销
	private int limitedBuy;// 售空数量 ,add by zhangy 2016年1月25日
	private String areaId; // 区域ID, add by caoh at 2015/9/10
	private String areaName; // 区域名称, add by caoh at 2015/9/10
	private String areaIdProvince;//zhangyq add 2016-5-6 10:40:02
	private String areaNameProvince;//zhangyq add 2016-5-6 10:40:02
	private BigDecimal goodsInfoStock; // 货品库存, add by caoh at 2015/9/15
	private String catIdL1; // 商品所在一级类别ID, add by caoh at 2015/9/16
	private String catIdL2; // 商品所在二级类别ID, add by caoh at 2015/9/16
	private String catIdL3; // 商品所在三级类别ID, add by caoh at 2015/9/16
	private String catNameL1; // 商品所在一级类别NAME, add by caoh at 2015/9/16
	private String catNameL2; // 商品所在二级类别NAME, add by caoh at 2015/9/16
	private String catNameL3; // 商品所在三级类别NAME, add by caoh at 2015/9/16
	private String catCodeL1;
	private String catCodeL2;
	private String catCodeL3;//分类code add by zhangyq 2016-4-29 10:43:34
	private String skuId; // SKUID, 还有一个ID是商品ID, 有用没用先冗余, add by caoh at
	private String specDesc; // 规格描述
	private String goodsInitCount;// 起订量
	private Calendar goodsUptime; // 上架时间
	private String nums;// 赠品数量,赠品数量大于1,说明该货品有赠品活动
	private String selfSupport; // 自营标记, add by caoh at 2015/11/20
	
	
	private String typeId; // 类型ID
	
	
	
	//zhangyq add 2016-6-12 11:18:26   关于活动添加的以下内容信息
//	 K.ACT_PRICE,K.ACT_STOCK,K.ACT_MINCOUNT,K.PLATFORM,K.ACTIVITY_TYPE
	private String		actId;
	private BigDecimal	actPrice;
	private BigDecimal	actStock;
	private BigDecimal	actMincount;
	private String actPlatform;
	private String actType;
	private String actAreas;
	
	//zhangyq add 2016-7-4 18:52:38
	private Calendar startTime;
	private Calendar endTime;
	//----------------------------------

	public int getLimitedBuy() {
		return limitedBuy;
	}

	public void setLimitedBuy(int limitedBuy) {
		this.limitedBuy = limitedBuy;
	}

	public String getPromotionChannel() {
		return promotionChannel;
	}

	public void setPromotionChannel(String promotionChannel) {
		if (StringUtil.isEmpty(promotionChannel)) {
			this.promotionChannel = "";
		} else {
			this.promotionChannel = promotionChannel;
		}
	}

	public String getSelfSupport() {
		return selfSupport;
	}

	public void setSelfSupport(String selfSupport) {
		this.selfSupport = selfSupport;
	}

	public String getNums() {
		return nums;
	}

	public void setNums(String nums) {
		this.nums = nums;
	}

	public String getSpecDesc() {
		return specDesc;
	}

	public void setSpecDesc(String specDesc) {
		this.specDesc = specDesc;
	}

	public String getSkuId() {
		return skuId;
	}

	public void setSkuId(String skuId) {
		this.skuId = skuId;
	}

	public String getCatIdL1() {
		return catIdL1;
	}

	public void setCatIdL1(String catIdL1) {
		this.catIdL1 = catIdL1;
	}

	public String getCatIdL2() {
		return catIdL2;
	}

	public void setCatIdL2(String catIdL2) {
		this.catIdL2 = catIdL2;
	}

	public String getCatIdL3() {
		return catIdL3;
	}

	public void setCatIdL3(String catIdL3) {
		this.catIdL3 = catIdL3;
	}

	public String getCatNameL1() {
		return catNameL1;
	}

	public void setCatNameL1(String catNameL1) {
		this.catNameL1 = catNameL1;
	}

	public String getCatNameL2() {
		return catNameL2;
	}

	public void setCatNameL2(String catNameL2) {
		this.catNameL2 = catNameL2;
	}

	public String getCatNameL3() {
		return catNameL3;
	}

	public void setCatNameL3(String catNameL3) {
		this.catNameL3 = catNameL3;
	}

	public double getGoodsInfoMarketPrice() {
		return goodsInfoMarketPrice;
	}

	public void setGoodsInfoMarketPrice(double goodsInfoMarketPrice) {
		this.goodsInfoMarketPrice = goodsInfoMarketPrice;
	}

	public double getGoodsInfoCostPrice() {
		return goodsInfoCostPrice;
	}

	public void setGoodsInfoCostPrice(double goodsInfoCostPrice) {
		this.goodsInfoCostPrice = goodsInfoCostPrice;
	}

	public double getPromotionPrice() {
		return promotionPrice;
	}

	public void setPromotionPrice(double promotionPrice) {
		this.promotionPrice = promotionPrice;
	}

	public String getAreaId() {
		return areaId;
	}

	public void setAreaId(String areaId) {
		this.areaId = areaId;
	}

	public String getAreaName() {
		return areaName;
	}

	public void setAreaName(String areaName) {
		this.areaName = areaName;
	}

	public String getSupplyerName() {
		return supplyerName;
	}

	public void setSupplyerName(String supplyerName) {
		this.supplyerName = supplyerName;
	}

	public String getSupplyerAddr() {
		return supplyerAddr;
	}

	public void setSupplyerAddr(String supplyerAddr) {
		this.supplyerAddr = supplyerAddr;
	}

	public String getBrandName() {
		return brandName;
	}

	public void setBrandName(String brandName) {
		this.brandName = brandName;
	}

	public String getCatName() {
		return catName;
	}

	public void setCatName(String catName) {
		this.catName = catName;
	}

	public int getSalesNum() {
		return salesNum;
	}

	public void setSalesNum(int salesNum) {
		this.salesNum = salesNum;
	}

	public int getCommentNum() {
		return commentNum;
	}

	public void setCommentNum(int commentNum) {
		this.commentNum = commentNum;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getId() {
		return this.id;
	}

	public void setCatId(String catId) {
		this.catId = catId;
	}

	public String getCatId() {
		return this.catId;
	}

	public void setTypeId(String typeId) {
		this.typeId = typeId;
	}

	public String getTypeId() {
		return this.typeId;
	}

	public void setGoodsName(String goodsName) {
		this.goodsName = goodsName;
	}

	public String getGoodsName() {
		return this.goodsName;
	}

	public void setGoodsSubtitle(String goodsSubtitle) {
		this.goodsSubtitle = goodsSubtitle;
	}

	public String getGoodsSubtitle() {
		return this.goodsSubtitle;
	}

	public void setGoodsNo(String goodsNo) {
		this.goodsNo = goodsNo;
	}

	public String getGoodsNo() {
		return this.goodsNo;
	}

	public void setGoodSn(String goodSn) {
		this.goodSn = goodSn;
	}

	public String getGoodSn() {
		return this.goodSn;
	}

	public void setGoodsKeywords(String goodsKeywords) {
		this.goodsKeywords = goodsKeywords;
	}

	public String getGoodsKeywords() {
		return this.goodsKeywords;
	}

	public void setBrandId(String brandId) {
		this.brandId = brandId;
	}

	public String getBrandId() {
		return this.brandId;
	}

	public void setGoodsBrief(String goodsBrief) {
		this.goodsBrief = goodsBrief;
	}

	public String getGoodsBrief() {
		return this.goodsBrief;
	}

	public void setGoodsAdded(String goodsAdded) {
		this.goodsAdded = goodsAdded;
	}

	public String getGoodsAdded() {
		return this.goodsAdded;
	}

	public void setGoodsUptime(Calendar goodsUptime) {
		this.goodsUptime = goodsUptime;
	}

	public Calendar getGoodsUptime() {
		return this.goodsUptime;
	}

	public void setGoodsPrice(double goodsPrice) {
		this.goodsPrice = goodsPrice;
	}

	public double getGoodsPrice() {
		return this.goodsPrice;
	}

	public void setGoodsRecom(String goodsRecom) {
		this.goodsRecom = goodsRecom;
	}

	public String getGoodsRecom() {
		return this.goodsRecom;
	}

	public void setGoodsImg(String goodsImg) {
		this.goodsImg = goodsImg;
	}

	public String getGoodsImg() {
		return this.goodsImg;
	}

	public void setGoodsScore(double goodsScore) {
		this.goodsScore = goodsScore;
	}

	public double getGoodsScore() {
		return this.goodsScore;
	}

	public void setGoodsDeno(String goodsDeno) {
		this.goodsDeno = goodsDeno;
	}

	public String getGoodsDeno() {
		return this.goodsDeno;
	}

	public void setGoodsDetailDesc(String goodsDetailDesc) {
		this.goodsDetailDesc = goodsDetailDesc;
	}

	public String getGoodsDetailDesc() {
		return this.goodsDetailDesc;
	}

	public void setGoodsSeoTitle(String goodsSeoTitle) {
		this.goodsSeoTitle = goodsSeoTitle;
	}

	public String getGoodsSeoTitle() {
		return this.goodsSeoTitle;
	}

	public void setGoodsSeoKeyword(String goodsSeoKeyword) {
		this.goodsSeoKeyword = goodsSeoKeyword;
	}

	public String getGoodsSeoKeyword() {
		return this.goodsSeoKeyword;
	}

	public void setGoodsSeoDesc(String goodsSeoDesc) {
		this.goodsSeoDesc = goodsSeoDesc;
	}

	public String getGoodsSeoDesc() {
		return this.goodsSeoDesc;
	}

	public void setGoodsProm(String goodsProm) {
		this.goodsProm = goodsProm;
	}

	public String getGoodsProm() {
		return this.goodsProm;
	}

	public void setGoodsInfoInstocksell(String goodsInfoInstocksell) {
		this.goodsInfoInstocksell = goodsInfoInstocksell;
	}

	public String getGoodsInfoInstocksell() {
		return this.goodsInfoInstocksell;
	}

	public void setGoodsUsecoupon(String goodsUsecoupon) {
		this.goodsUsecoupon = goodsUsecoupon;
	}

	public String getGoodsUsecoupon() {
		return this.goodsUsecoupon;
	}

	public void setGoodsCreateName(String goodsCreateName) {
		this.goodsCreateName = goodsCreateName;
	}

	public String getGoodsCreateName() {
		return this.goodsCreateName;
	}

	public void setGoodsCreateTime(Calendar goodsCreateTime) {
		this.goodsCreateTime = goodsCreateTime;
	}

	public Calendar getGoodsCreateTime() {
		return this.goodsCreateTime;
	}

	public void setGoodsModifiedName(String goodsModifiedName) {
		this.goodsModifiedName = goodsModifiedName;
	}

	public String getGoodsModifiedName() {
		return this.goodsModifiedName;
	}

	public void setGoodsModifiedTime(Calendar goodsModifiedTime) {
		this.goodsModifiedTime = goodsModifiedTime;
	}

	public Calendar getGoodsModifiedTime() {
		return this.goodsModifiedTime;
	}

	public void setGoodsDelName(String goodsDelName) {
		this.goodsDelName = goodsDelName;
	}

	public String getGoodsDelName() {
		return this.goodsDelName;
	}

	public void setGoodsDelTime(Calendar goodsDelTime) {
		this.goodsDelTime = goodsDelTime;
	}

	public Calendar getGoodsDelTime() {
		return this.goodsDelTime;
	}

	public void setGoodsDelflag(String goodsDelflag) {
		this.goodsDelflag = goodsDelflag;
	}

	public String getGoodsDelflag() {
		return this.goodsDelflag;
	}

	public void setIsThird(String isThird) {
		this.isThird = isThird;
	}

	public String getIsThird() {
		return this.isThird;
	}

	public void setSupplyerId(String supplyerId) {
		this.supplyerId = supplyerId;
	}

	public String getSupplyerId() {
		return this.supplyerId;
	}

	public BigDecimal getGoodsInfoStock() {
		return goodsInfoStock;
	}

	public void setGoodsInfoStock(BigDecimal goodsInfoStock) {
		this.goodsInfoStock = goodsInfoStock;
	}

	public String getGoodsInitCount() {
		return goodsInitCount;
	}

	public void setGoodsInitCount(String goodsInitCount) {
		this.goodsInitCount = goodsInitCount;
	}

	public String getCatCode() {
		return catCode;
	}

	public void setCatCode(String catCode) {
		this.catCode = catCode;
	}

	public String getCatCodeL1() {
		return catCodeL1;
	}

	public void setCatCodeL1(String catCodeL1) {
		this.catCodeL1 = catCodeL1;
	}

	public String getCatCodeL2() {
		return catCodeL2;
	}

	public void setCatCodeL2(String catCodeL2) {
		this.catCodeL2 = catCodeL2;
	}

	public String getCatCodeL3() {
		return catCodeL3;
	}

	public void setCatCodeL3(String catCodeL3) {
		this.catCodeL3 = catCodeL3;
	}

	public String getAreaIdProvince() {
		return areaIdProvince;
	}

	public void setAreaIdProvince(String areaIdProvince) {
		this.areaIdProvince = areaIdProvince;
	}

	public String getAreaNameProvince() {
		return areaNameProvince;
	}

	public void setAreaNameProvince(String areaNameProvince) {
		this.areaNameProvince = areaNameProvince;
	}

	public String getUid() {
		return uid;
	}

	public void setUid(String uid) {
		this.uid = uid;
	}

	public BigDecimal getActPrice() {
		return actPrice;
	}

	public void setActPrice(BigDecimal actPrice) {
		this.actPrice = actPrice;
	}

	

	public BigDecimal getActStock() {
		return actStock;
	}

	public void setActStock(BigDecimal actStock) {
		this.actStock = actStock;
	}

	public BigDecimal getActMincount() {
		return actMincount;
	}

	public void setActMincount(BigDecimal actMincount) {
		this.actMincount = actMincount;
	}

	public String getActPlatform() {
		return actPlatform;
	}

	public void setActPlatform(String actPlatform) {
		this.actPlatform = actPlatform;
	}

	public String getActType() {
		return actType;
	}

	public void setActType(String actType) {
		this.actType = actType;
	}

	public String getActAreas() {
		return actAreas;
	}

	public void setActAreas(String actAreas) {
		this.actAreas = actAreas;
	}

	public String getActId() {
		return actId;
	}

	public void setActId(String actId) {
		this.actId = actId;
	}

	public Calendar getStartTime() {
		return startTime;
	}

	public void setStartTime(Calendar startTime) {
		this.startTime = startTime;
	}

	public Calendar getEndTime() {
		return endTime;
	}

	public void setEndTime(Calendar endTime) {
		this.endTime = endTime;
	}
	

}

© 著作权归作者所有

zzuqiang
粉丝 25
博文 61
码字总数 133582
作品 0
郑州
程序员
私信 提问
into100沙龙第17期知名案例高可用高并发解决之道

云计算、大数据等技术的成熟,让更多企业具备了在很短时间内做出好产品的可能;而移动互联网的普及,让好产品获取更多用户变得更为简单;如果用户需求抓得准,营销得当,用户数量将很可能获得...

msup
2016/03/08
372
1
into100沙龙第17期知名案例高可用高并发解决之道

云计算、大数据等技术的成熟,让更多企业具备了在很短时间内做出好产品的可能;而移动互联网的普及,让好产品获取更多用户变得更为简单;如果用户需求抓得准,营销得当,用户数量将很可能获得...

msup
2016/03/08
8
0
2017中华数据库与运维大会

会议简介: 会议官网:http://meeting.zhdba.com/2017dtcc 中华数据库与运维大会由中华数据库行业协会主办,大会坚持公益性质且技术干货为主,致力于以多种形式灵活整合、分享最新技术信息,...

中华数据库与运维大会
2017/03/02
62
0
2017中华数据库与运维大会

会议简介: 会议官网:http://meeting.zhdba.com/2017dtcc 中华数据库与运维大会由中华数据库行业协会主办,大会坚持公益性质且技术干货为主,致力于以多种形式灵活整合、分享最新技术信息,...

中华数据库与运维大会
2017/03/02
197
0
B2B2C电商系统前端页面开发

项目简介: B2B2C电商系统前端页面开发 将提供的开发资料: 1.部分前端页面设计稿 2.完整目录结构及文件命名 3.Routes 列表及对应 Scenes 名称 4.完整的Restful API结构字段说明 5.Mock 场景...

优仁
2017/03/23
18
0

没有更多内容

加载失败,请刷新页面

加载更多

一套完整的软件开发流程是怎样的?

做什么事都需要一个流程,软件开发也不例外。 那么,一个软件从无到有到底是怎么开发的?一个软件产品的结果为什么是这样?为什么开发的速度不能再快一点。为什么程序员大多秃顶?他们有那么...

我想造火箭
17分钟前
4
0
漂亮思维导图怎样绘制?教你快速套用思维导图模板绘制d

用MindMaster软件绘制思维导图,会更加高效和美观!因为MindMaster是一款专业的思维导图软件,零基础经验的朋友花费5分钟时间就能掌握它的相关画法。以下是电脑软件思维导图画法的简单步骤。...

工具分享
20分钟前
4
0
linux 软链接与 硬链接的区别

软链接与硬链接的区别 1. 硬链接不会创建inode,即使用的inode都是一样的。软链接会创建新的inode。 2. 硬链接的访问属性和源文件一模一样,没有l的标识。软链接的访问属性写明了是l,且访问...

突突突酱
21分钟前
2
0
新特性解读 | MySQL 8.0.18 有权限控制的复制

原文:Replication with restricted privileges https://mysqlhighavailability.com/replication-with-restricted-privileges/ 作者:Pedro Figueiredo 翻译:管长龙 背景 MySQL 8.0.18 以前......

爱可生
29分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部