当前位置: 首页 > news >正文

全球建筑网站wordpress 多条件筛选

全球建筑网站,wordpress 多条件筛选,唐山网站建设唐山,做网站建网站公司一、背景 订单系统存在于各行各业#xff0c;如电商订单、银行流水、运营商话费账单等#xff0c;是一个非常广泛、通用的系统。对于这类系统#xff0c;在过去十几年发展中已经形成了经典的做法。但是随着互联网的发展#xff0c;以及各企业对数据的重视#xff0c;需要…一、背景 订单系统存在于各行各业如电商订单、银行流水、运营商话费账单等是一个非常广泛、通用的系统。对于这类系统在过去十几年发展中已经形成了经典的做法。但是随着互联网的发展以及各企业对数据的重视需要存储和持久化的订单量越来越大。数据的重视程度与数据规模的膨胀带来了新的挑战原有的系统是否还能继续满足需求成了焦点 需求场景 某电商平台A需要进行持久化所有平台产生的订单数据。同时基于所有的订单数据系统又需要向外提供面向多种角色消费者、店家、平台三类人群的多元化的查询服务。消费者可以查询自己的历史订单商家可以统计热销产品平台也可以分析用户行为、平台交易规模等。主要查询方式涵盖订单的多维度检索以及订单数据的分析、统计等例如 面向消费者【A消费者】*【近1年】*【产品名含电脑字段】订单查询 面向店家【B店家】*【近1个月】*【每个产品】销售量排名 ...... 技术点 在订单场景中技术上通常需要考虑的技术点主要包含如下几个方面 查询能力需要具备丰富的查询类型如多维度、范围、模糊查询等同时具备排序、统计等功能数据量存储海量数据的同时满足强一致、高可用、低成本等要求服务性能应对高并发请求高并发的同时保证低延迟二、方案演进 应对订单场景电商通常会采用MySQL传统方案。借助关系型数据库强大的查询能力用户可直接通过SQL语句实现订单数据的多维度查询、数据统计等。所谓数据膨胀分为横向、纵向两种横向即不断迭代引入的新字段维度纵向即总的存储数据量。在面对这两种订单数据膨胀上单MySql方案逐渐变得吃力。 SQL NoSQL的组合方案以下称组合方案便应运而生借助两个数据库各自的优势分别解决不同场景各自的需求。但组合方案同样也带来了新的问题组合方案牺牲空间成本同时也增加了开发工作量与运维复杂度。在保证数据一致性上产生额外开销。 下面让我们看一下如下几个常规方案 常规方案 1、MySql分库分表方案 MySql自身拥有强大的数据查询、分析功能基于MyQql创建订单系统可以应对订单数据多维查询、统计场景。伴随着订单数据量的增加用户会采取分库、分表方案应对通过这种伪分布式方案解决数据膨胀带来的问题。但数据一旦达到瓶颈便需要重新创建更大规模的分库数据的全量迁移麻烦就会不断出现。数据迭代、膨胀带来的困扰是MySql方案难于逾越的。仅仅依靠MySql的传统订单方案短板凸显。 1、数据纵向数据规模膨胀采用分库分表方案MySql在部署时需要预估分库规模数据量一旦达到上限后重新部署并做数据全量迁移 2、数据横向字段维度膨胀schema需预定义迭代新增新字段变更复杂。而维度到达一定量后影响数据库性能 2、MySqlHBase方案 引入双数据的方案应运而生通过实时数据、历史数据分存的方案可以一定程度解决数据量膨胀问题。该方案将数据归类成两部分存储实时数据、历史数据。同时通过数据同步服务将过期数据同步至历史数据。 1、实时订单数据例如近3个月的订单将实时订单存入MySql数据库。实时订单的总量膨胀的速度得到了限制同时保证了实时数据的多维查询、分析能力 2、历史订单数据例如3个月以前的订单将历史订单数据存入HBase借助于HBase这一分布式NoSql数据库有效应对了订单数据膨胀困扰。也保证了历史订单数据的持久化 但是该方案牺牲了历史订单数据对用户、商家、平台的使用价值假设了历史数据的需求频率极低。但是一旦有需求便需要全表扫描查询速度慢、IO成本很高。而维护数据同步又带来了数据一致性、同步运维成本飙升等难题 3、MySqlElasticsearch方案 组合方案还有MySqlElasticsearch该方案同样是将数据分两部分存储可以一定程度解决订单索引维度增长问题。用户自己维护数据同步服务保证两部分数据的一致性 1、全量数据将全量的订单数据存入MySql数据库订单ID之外的数据整体存为一个字段。该全量数据作为持久化存储也用于非索引字段的反查 2、查询数据仅将需要检索的字段存入Elasticsearch基于Lucene分布式索引数据库借助于Elasticsearch的索引能力提供可以应付维度膨胀的订单数据然后必要时反查MySql获取订单完整信息 该方案应付了数据维度膨胀带来的困扰但是随着订单量的不断膨胀MySql扩展性差的问题再次暴露出来。同时数据同步至Elasticsearch的方案开发、运维成本很高方案选择也存在弊端。 能力分析MySqlHBaseElasticsearchTableStore存储方式行存储列存储索引存储列存储索引存储扩展性单机、扩展性差水平扩展水平扩展自动水平扩展一致性强一致性强一致性、时序一致性 强一致性、时序一致性检索较弱的支持不支持支持支持数据量~ 1T~亿行~10 PB~万亿行~1 PB~千亿行~10 PB~万亿行 TableStore方案 如果使用表格存储TableStore研发的多元索引SearchIndex方案则可以完美地解决以上问题。TableStore具有即开即用按量收费等特点。多元索引随时创建是海量电商订单元数据管理的优质方案。 TableStore作为阿里云提供的一款全托管、分布式NoSql型数据存储服务具有【海量数据存储】、【热点数据自动分片】、【海量数据多维检索】等功能天然地解决了订单数据大爆炸这一挑战 同时SearchIndex功能在保证用户数据高可用的基础上提供了数据多维度搜索、统计等能力。针对多种场景创建多种索引实现多种模式的检索。用户可以仅在需要的时候创建、开通索引。由TableStore来保证数据同步的一致性这极大的降低了用户的方案设计、服务运维、代码开发等工作量。 三、基于表格存储实现的订单场景Demo 业务描述 每成功完成一笔交易就会生成一笔交易数据。交易数据包含了交易中的必要元素如交易时间、交易的双方、交易的产品、数量、价格等这里选择最基本元素举例仅将必要字段简历索引格式如下 订单持久化数据 表名order_table 列名索引类型类型索引字段order_id(主键列)KEYWORDString均匀散列的字符串time_stampLONGlong交易时间戳consumer_idKEYWORDString消费者seller_idKEYWORDString商家unique编号product_idKEYWORDString产品unique编号product_nameKEYWORDString产品名product_typeKEYWORDString产品类型product_priceDOUBLEdouble产品单价product_count double total_pay double description String ........................ 创建订单表 用户仅需维护一个数据库按如下方式创建用户可以通过控制台创建、管理Table也可通过SDK ListPrimaryKeySchema primaryKey Arrays.asList(new PrimaryKeySchema(order_id, PrimaryKeyType.STRING) );TableMeta tableMeta new TableMeta(tableName); tableMeta.addPrimaryKeyColumns(primaryKey); CreateTableRequest request new CreateTableRequest(tableMeta, new TableOptions(-1, 1)); CreateTableResponse createTableResponse otsClient.createTable(request); 创建索引 用户根据自身需求在需要的时候随时创建索引。TableStore自动做全量、增量的索引数据同步用户可以通过控制台创建、管理SearchIndex也可通过SDK按如下方式创建索引暂不支持update CreateSearchIndexRequest createSearchIndexRequest new CreateSearchIndexRequest(); createSearchIndexRequest.setTableName(tableName); createSearchIndexRequest.setIndexName(indexName);IndexSchema indexSchema new IndexSchema(); indexSchema.setIndexSetting(new IndexSetting(1));//必写 indexSchema.setFieldSchemas(Arrays.asList(new FieldSchema(product_id, FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true).setStore(true),new FieldSchema(product_name, FieldType.TEXT).setIndex(true),//TEXT不能设置docValuesnew FieldSchema(product_type, FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true).setStore(true),new FieldSchema(product_count, FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true).setStore(true),new FieldSchema(consumer_id, FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true).setStore(true),new FieldSchema(seller_id, FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true).setStore(true),new FieldSchema(total_pay, FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true).setStore(true),new FieldSchema(time_stamp, FieldType.LONG).setIndex(true).setEnableSortAndAgg(true).setStore(true) )); createSearchIndexRequest.setIndexSchema(indexSchema);CreateSearchIndexResponse createSearchIndexResponse otsClient.createSearchIndex(createSearchIndexRequest); 数据读取 数据读取分为两类 1、基于原生表格存储的主键列获取getRow, getRange, batchGetRow等; 2、基于新SearchIndex功能Querysearch; 主键读取 GetRowRequest getRowRequest new GetRowRequest();PrimaryKey pk new PrimaryKey(new PrimaryKeyColumn[]{new PrimaryKeyColumn(order_id, PrimaryKeyValue.fromString(fa960b5af)) });SingleRowQueryCriteria singleRowQueryCriteria new SingleRowQueryCriteria(order_table, pk); singleRowQueryCriteria.setMaxVersions(1); getRowRequest.setRowQueryCriteria(singleRowQueryCriteria);GetRowResponse rowResponse o​tsClient.getRow(getRowRequest); Search读取 新增的search接口通过设置QueryRequest实现不同query不同aggregation不同sort的功能 SearchQuery searchQuery new SearchQuery();//设置查询条件用户发挥 searchQuery.setQuery(Query anyQuery);//做分页 searchQuery.setLimit(10); searchQuery.setOffSet(0);SearchRequest searchRequest new SearchRequest(tableName, indexName, searchQuery);SearchRequest.ColumnsToGet columnsToGet new SearchRequest.ColumnsToGet(); columnsToGet.setColumns(columnsToShow);//ListString columnsToShow searchRequest.setColumnsToGet(columnsToGet);SearchResponse resp otsClient.search(searchRequest); 返回结构 SearchResponse extends Response {private long totalCount;//query匹配成功数据总数private ListRow rows;//query匹配数据列表1private boolean isAllSuccess; } 场景Demo search功能主要分为三种多维度查询排序聚合使用上通过三种功能的组合来实现 场景1多维度查询 【consumer_001用户】【上个月】购买【产品名含某牙膏字段】的订单记录 使用BoolQuery, TermQuery, RangeQuery, MatchPhraseQuery BoolQuery boolQuery new BoolQuery();TermQuery termQuery new TermQuery(); termQuery.setFieldName(consumer_id); termQuery.setTerm(ColumnValue.fromString(consumer_001));RangeQuery rangeQuery new RangeQuery(); rangeQuery.setFieldName(time_stamp); rangeQuery.greaterThanOrEqual(ColumnValue.fromLong(fromTime)); rangeQuery.lessThanOrEqual(ColumnValue.fromLong(toTime));MatchPhraseQuery matchPhraseQuery new MatchPhraseQuery(); matchPhraseQuery.setFieldName(product_name); matchPhraseQuery.setText(牙膏);boolQuery.setMustQueries(Arrays.asList(termQuery, rangeQuery, matchPhraseQuery ));SearchQuery searchQuery new SearchQuery(); searchQuery.setQuery(boolQuery); searchQuery.setLimit(10);//仅构建Query SearchRequest searchRequest new SearchRequest(tableName, indexName, searchQuery); 场景2查询排序 整个平台【上个月】【单订单支付金额】排行榜Top10 使用RangeQuery, FieldSort RangeQuery rangeQuery new RangeQuery(); rangeQuery.setFieldName(time_stamp); rangeQuery.greaterThanOrEqual(ColumnValue.fromLong(fromTime)); rangeQuery.lessThanOrEqual(ColumnValue.fromLong(toTime));//排序因子 FieldSort fieldSort new FieldSort(total_pay); fieldSort.setOrder(SortOrder.DESC);SearchQuery searchQuery new SearchQuery(); searchQuery.setQuery(rangeQuery); searchQuery.setSort(new Sort(Arrays.asList(fieldSort))); searchQuery.setLimit(10);//构建QuerySort SearchRequest searchRequest new SearchRequest(tableName, indexName, searchQuery); 原文链接 本文为云栖社区原创内容未经允许不得转载。
http://www.pierceye.com/news/666602/

相关文章:

  • dw网站导航怎么做3免费网站建站
  • 用jsp做网站的代码句容网站建设制作
  • 宁国新站seo网页版微信登录提示二维码已失效
  • 深圳英文网站建设去哪家公司电商网站开发
  • 黑色网站后台出库入库管理软件app
  • 网站建设公司团队简介国外有网站备案制度吗
  • 怎么让公司网站随便就搜的到wordpress后台卡顿
  • 网站怎么做图片动态图片不显示报价单模板怎么做
  • 怎么建一个公司运营网站江西网站建设哪家专业
  • 网站后期维护费用网站开发学徒工作如何
  • 网站建站程序一站式网站建设服务
  • 滨州内做网站系统的公司购物网站开发用什么软件
  • 网站建设静态部分报告总结在合肥哪里学网站建设
  • 建站行业现状网易与暴雪合作
  • 网站中添加百度地图购物网站产品做促销能赚钱吗
  • 金融公司 网站开发怎么样建网站卖东西
  • 网站导航栏垂直如何提高你的网站的粘性
  • 直播网站开发接入视频中国建筑招聘官网2022
  • 大连专业企业建站找哪家wordpress 保护wp-login.php
  • 微网站建设哪家便宜想要找个网站做环评公示
  • 建设银行网银网站激活个人简历模板电子版可填写
  • 肃州区建设局网站宁夏百度seo
  • 关于做电影的网站设计西安网站建设制作 熊掌号
  • idc网站建设怎么自己做一个网页链接
  • 网站开发安全模块方案个人网站搭建软件
  • 重庆建设招标造价信息网站个人网站建设与维护
  • 网站备案用户名忘了怎么办嘉兴做外贸网站的公司
  • 1688网站的特点网站制作器手机版下载
  • 兖州网站开发做一个中英文网站多少钱
  • wordpress怎么做网盘站好看的页面图片