• 闲鱼商品理解数据分析平台

    闲鱼是一个以C2C为主的平台,区别于B端的用户,C端卖家在发布商品时更倾向于图 描述的轻发布模式,对于补充商品的结构化信息往往执行力和专业程度都不高,这为我们的商品理解带来了很大的困难。为了能够在发布侧获得更多的商品结构化信息,我们开始尝试在原有图 文的极简发布模式中加入商品关键属性的补充选项,事实证明,适当的结构化属性选项并不会影响用户的发布体验,却能极大地提升我们对商品理解的能力。然而存在以下问题:在设定结构化属性选项时,往往强依赖行业运营的经验,缺少实时的、多维度的数据分析手段。虽然离线产出的数据报表能够在一定程度上统计某些关键指标,但对于精细的、个性化的数据查询需求,离线报表扩展性和性能都不足。基于上述问题,我们搭建了龙宫数据分析平台。 龙宫数据分析平台的定位与总体框架 区别于数据报表,我们在设计龙宫数据分析平台时主要考虑了以下方面: 实时性要求,当运营上线新策略或因服务问题线上出现数据波动时,我们希望能够实时地分析出结构化类目属性在这段时间内的覆盖情况,以帮忙运营做进一步的决策。 多维度要求,闲鱼目前拥有8000 的叶子类目,不同行业运营的侧重点各不相同,数据分析平台要能够满足个性化的数据分析需求。 数据管理要求,闲鱼的类目属性、SPU数据、运营策略需要一个统一管理的地方。 我们希望以此实现结构化数据对运营的反哺,构成商品结构化数据生产与应用的闭环。 总体分层框架如下: 数据链路建设 构建数据分析平台的关键是数据链路的建设,在闲鱼,结构化数据主要分为在线数据(通过发布、编辑入口用户直接填写的数据)和离线数据(通过后置算法模型分析商品的图文获取的数据)。数据链路的建设存在以下关键难点: 存储数据量大(全量20亿 ),访问QPS高(1.5万 ),服务稳定性要求高。 数据来源多(10余种),各来源数据异构,存在重复、冲突的数据,数据实时性要求高(秒级延迟)。 数据分析场景复杂(QPS小,但sql复杂度高),普通数据库查询难以支撑。 针对数据量大和QPS高的问题,我们选用tableStore作为存储商品结构化信息的数据库,它一种典型的列存储数据库,具有扩展性好、可用性高、单机可支撑QPS上万的特性,非常适合作为大数据的存储终端。其可用性可达99.99%,同时具有主备双库能力。同时我们在线数据存储在mysql的商品表中,通过在java应用中监听表的变更将数据写入数据…

    2021年6月11日
  • 如何快速开发一个商城小程序?

    对于广大企业、商家来说,如果想在网上销售产品,可采用的渠道有: 1、基于某宝、某东等平台,开一家店,然后利用平台上的店铺销售产品; 2、基于微信小程序,搭建一个商城型微信小程序,然后用商城小程序销售产品。 因外卖小程序具有: 1、无佣金:某宝、某东等平台,会在订单成交之后,从订单中抽走5%-10%的佣金;而小程序不会抽取一分钱佣金。 2、年费低:某宝、某东的年费,少则10000元,多则30000-60000元。而微信小程序的年费,基础版2000元,高级版10000元。而且大家还可以选择“买断”,也就是一次性付费,后续不再付费的模式,这种模式的费用也就30000元左右,仅某宝、某东这些平台一年的费用。 3、更强的销售、获客能力:首先,小程序是在微信这个APP上运行的;其次,小程序在微信中可以一键转发、分享;第三,小程序带有丰富的营销插件,比如:秒杀、拼团、分享领券/领红包、分销等等。因此,商家们用商城小程序卖货,往往能比用第三方电商平台卖货,卖出更多产品。 等特点。所以,现如今,很多企业、商家都选择用商城小程序来销售产品。 但由于是第一次接触商城小程序,所以大家都在问:如何快速开发一个商城小程序。接下来就让来自上海数字商圈,有丰富小程序开发、搭建经验的产品经理给大家介绍: 如何快速开发一个商城小程序? 第一步:注册小程序:进入微信公众平台,在“账号分类中”找到“小程序”点击查看详情,再点击“前往注册”,然后按注册页面的要求,填写相关信息、提交相关材料。 第二步:打开小程序开发、搭建平台,然后登陆平台。登陆之后,选择一个商城模板,选好后,在“商品”设置页面,添加商品、商家介绍,设置商品分类等等。 最后一步:上传小程序并提交审核。当审核通过之后,大家就可以正常的用小程序做卖货了。 以上就是如何快速开发一个商城小程序?方法来了!的全部内容。最后要说的是。除了文中说到的特点,商城小程序还有:强大的客户留存能力、刺激客户复购的能力等等。因此可以说对于企业、商家们来说,都是非常适合去开发一个商城小程序的。

    2021年6月2日
  • 2021年如何选择国内外的云服务器?

    我们都知道建立网站最基本的东西就是服务器,一个优质的服务器是保证网站稳定运行的最基本要素,基于云服务器相对于传统服务器的优势,得到很多公司的青睐,那如何选择合适自己的云服务器呢?接下来就和大家一起来聊聊吧! 一、选择国内服务器的优缺点 沟通方便,由于国内服务器的服务普遍都是24小时,而且不存在时间冲突,可以很方便的和主机商沟通解决问题。 速度快,由于国内服务器的机房一般都是在国内,位置上离我们都很近,所经过的路由节点也少。因此,如果是国内用户访问的话,速度还是非常快的。 价格较高,我们都知道,使用国内服务器,不仅需要备案,而且租用服务器的价格也是比较高的,而且一般都还是有带宽和流量限制,所以,很多朋友为了减少服务器租用成本,大多都会选择国外服务器。 二、选择国外服务器的优缺点 无需备案,我们都知道租用国内服务器都是需要备案的,而租用国外服务器是无需备案的,当然,可能很多朋友正是因为这点才选择国外服务器的。 汉化不完善,由于国外服务器的网站一般都是外文,因此,对于国内用户来说,无论是购买、使用还是沟通,多少都会有些困难和不方便。 IP容易被屏蔽,使用国外服务器,IP很容易会被屏蔽,因而很容易造成网站抽风或者无法访问。 三、如何选择一款适合自己的云服务器呢?1、了解自己的云服务器需求,从而了解自己的服务类型。例如各种基于软件的云解决方案,包括用于照片、视频和文档存储,提供CRM服务等。如果您需要的不仅仅是基本的数据存储,还有些云供应商会提供系列云计算解决方案,例如IT网络的基础架构以及按需访问软件,应用程序和虚拟服务器等服务。 2、了解云服务器的安全性。在将企业基础数据存储在云中时,在线安全性和安全性至关重要。云计算解决方案提供商至少应该拥有几个标准的安全措施,并且需要不断更新,以防止每天发生的黑客入侵等攻击。寻求安全措施,如防病毒检测,防火墙,日常安全审计,以及数据加密和多重用户验证等。 3、宕机历史。首先我们要知道,即便是规模最大、最受信任的云供应商也会不时遭遇停机。由于云服务器服务中断对于企业来说可能是代价高昂且相当具有破坏性的,因此最好选择尽可能宕机次数少的供应商,并了解清楚该云服务器供应商为确保在线率已采取的措施有哪些。 4、了解能否根据客户不断扩大的业务需求来调整其服务。云服务器支持弹性资源伸缩是必须的。此外还需要了解额外扩展资源的最大容量花费。正常情况下,…

    2021年6月1日
  • 买了一台云服务器到底能干什么?

    云服务器是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。简单地讲,云服务器就是虚拟的物理服务器。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。

    2021年6月1日
  • 如何查看Windows服务器的开关机日志

    今天本教程教大家查看win7系统开关机日志,有时候离开电脑后,不知道别人有没有动过自己电脑,我们可以通过查看Win7系统查看开关机日志来确定电脑是否被人动过。那么Win7系统如何查看开关机日志?下面小编以雨林木风win7系统为例,分享Win7系统查看开关机日志的操作方法。

    2021年6月1日
  • .net 简单的数据库操作框架

    SqlSugar是一款 老牌 .NET数据库操作框架,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用、功能齐全、高性能、轻量级、服务齐全、有专业技术支持一天18小时服务 支持数据库:MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓 框架新功能 最新稳定版本5.0.2.8 ,发布后1个月时间NUGET下载量达到5000的版本,用户使用也相当满意 而在稳定版本的基础上又布了5.0.2.9版本 加入3大新功能 1. 配置查询 解决了大量字典表和简单就为取一个name 就要写联表的问题,让单表查询解决一切 2.多租户 仓储 自动分配 3.行转列 1、配置查询 解决了大量字典表和简单就为取一个name 就要写联表的问题,让单表查询解决一切 字典表我相信大家都全用到,他们可以方便的存储性别、学历、岗位等 一串数据 并进行TypeId进行区分 1.1 创建测试数据 创建一个字典实体 public class DataDictionary { public string Code { get; set; } public string Name { get; set; } public string Type { get; set; } } 创建字典表并向里面插入测试数据 var db = GetInstance(); List datas = new List(); datas.Add(new DataDictionary() { Code=”1″, Name=”男”,Type=”sex” }); datas.Add(new DataDictionary() { Code = “2”, Name = “女”, Type = “sex” }); datas.Add(new DataDictionary() { Code = “1”, Name = “南通市”, Type = “city” }); datas.Add(new DataDictionary() { …

    2021年5月31日
  • 关于.NET微服务最热门的问题解答

    在我们最近让我们一起学习 .NET的微服务专场活动中,我们收到了一些很好的问题。我们在现场已经回答很多问题,但我们想继续回答一些在会议中出现的最热门的问题。如果你错过了现场直播,不要担心,因为你可以按需观看。 我们一起学习 .NET:https://letslearndotnet.splashthat.com/ 当我们扩展这些服务时,我们如何扩展与这些服务相关的数据库? 有一些定义良好的模式和最佳实践可以提高性能和扩展数据库。想要了解如何将数据划分为分区,以提高可伸缩性、减少和优化性能, 请参阅水平、垂直和功能性数据分区。想要深入研究微服务的伸缩性,分布式数据,为什么每个微服务都有数据库,在关系数据库和NoSQL数据库之间进行选择,请参考我们关于为Azure构建云原生.net应用程序的指导或下载免费的电子书。 水平、垂直和功能性数据分区:https://docs.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning 为Azure构建云原生.net应用程序:https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/distributed-data 免费的电子书:https://dotnet.microsoft.com/learn/azure/architecture#ebook-cloud-native-azure-swimlane 我们是否需要为每个微服务使用一个新的数据库,或者微服务可以共享相同的数据库实例? 团队使用微服务的自主性是构建云原生应用的一个重要好处。为了能够使团队能够灵活地在生产中推出更新、安全补丁和bug修复,而不会破坏其他微服务, 最好使用独立的数据库实例。原生云应用架构的灵感来自于著名的12要素应用程序方法论。其中一个因素“支持服务”指出,数据存储、缓存、消息代理等辅助资源应该通过一个可寻址URL公开。云提供商提供了各种各样丰富的托管支持服务。我们建议检查云中可用的数据库选项,而不是自己拥有和维护数据库。 12要素应用程序方法论:https://12factor.net/ 可用的数据库选项:https://docs.microsoft.com/en-us/dotnet/archite…

    2021年5月31日
  • 一个.NET开发的自用软件集锦

    这里可不敢讨论各种开发语言引战,单纯站在一个程序员角度分享一下日常应用,由于工作的本本,倒没啥娱乐软件,说的都是日常工作效率相关。话不多说,现在开始: 一、开发工具 先说饭碗相关,不像他们大公司的大佬们分工细致,前端后端DBA,我猜也有不少小公司开发和我一样,前后端、服务器、数据库或多或少都有接触。 1、代码相关:Visual Studio 2019(社区版免费) / Visual Studio Code(开源免费) 大名鼎鼎的VS系列不多介绍,.NET开发应该无人不晓,VS自然是开发首选,社区版免费,其他版本大家自行百度序列号。VS Code平时偶尔用作查看代码,修改配置文件,甚至于前端页面编写倒是极好的。稍后有空单独写个VS、VSC插件集锦,分享一下多年积攒下来祖传插件。 2、数据库相关:Navicat Premium 12 如果只是单纯数据库连接,首推Navicat Premium 12,主流数据库都可以连接,万能客户端,不然各种SQLServer Management Studio、PLSQL、MySQL Connecttion 都装起来其实也挺麻烦的,还不好管理。缺点自然是需要找破解版,你懂得。 11的破解版很好找,12相对麻烦,但有一个对我来说十分重磅的小功能,就是默认单独执行选中SQL语句,不像11还要手点,默认执行全部,搞不好就是个大事故,尤其是SQL Server管理工具用惯了的人。 当然了,其他的那些官方客户端该装还得装,主要看需求,毕竟有些功能如维护计划、数据库设置等等的,Navicat支持并不是很完善。Navicat只是作为日常SQL编写神器。 3、远程连接相关:mRemoteNG(开源免费) / MobaXterm(个人版免费) MSTSC,也就是Windows自带的远程连接倒是好用,但缺少了管理功能,谁不连个十几个远程呢 。单纯用MSTSC恐怕记IP都费了不少脑子。 mRemoteNG是WIndows专属,实际还是调用MSTSC那套东西,但是多了命名分类的功能,还有自动备份功能,妈妈再也不用担心我找不到远程地址了。https://mremoteng.org/ MobaXterm就厉害了,支持各种协议,基本属于通吃型远程连接客户端,有收费专业版,但日常使用免费版已经足够。我是觉得比XShell好用,更何况不用四处找破解。 4、反编译相关:d…

    2021年5月31日
  • .NET程序崩溃了怎么抓 Dump ?

    一:背景 1. 讲故事 最近几天接到了几个crash的求助,可能这几个朋友没玩过怎么去生成dump,只能手把手教,感觉也不是一个办法,所以有必要总结一下,后续再有朋友咨询的话,我就可以把这篇文章丢过去了,好了,我大概总结了下面三种方式: procdump -e procdump -> AEDebug Windows Error Reporting 老读者应该知道,我一直都推崇 procdump 去搞定这些事情,毕竟它是一款可跨平台抓取的强大灵巧工具。 二: 实现可测试案例 从 dump 样本来看,web类的程序是最多的,所以这里我就以 Asp.NET MVC 5 作为案例,在 RouteConfig 类中我使用一个Timer不断的抛出异常,目的就是把 w3wp 进程给弄挂掉,参考代码如下: public class RouteConfig { public static Timer timer; public static void RegisterRoutes(RouteCollection routes) { timer = new Timer(new TimerCallback(m => { var r = 10 / Convert.ToInt32(“0”); }), null, 60000, 5000); routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapRoute( name: “Default”, url: “{controller}/{action}/{id}”, defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } ); } } 对了,肯定有朋友问:为什么不在 Action 中抛异常,这是因为 Http管道 会把这种异常包装成 http 500,所以就达不到 crash 的效果了。 接下来把程序部署到 IIS 上并运行,可以清楚的看到 Windows 事件查看器 中成功的记录到了崩溃信息,如下图所示: 三: 3种抓取方式解析 1. 使用 procdump -e 这种方式简单但不太稳定,因为有几个朋友告诉我,procdump在抓取的过程中报错了,原因是进程已退…

    2021年5月31日
  • .NET基础知识快速通关

    【.NET】| 总结/Edison Zhou此系列文章为我在2015年发布于博客园的.NET基础拾遗系列,它十分适合初中级.NET开发工程师在面试前进行一个系统的复习,因此我将其搬到公众号分享与你。本文为第五篇,我们会对.NET的字符 … 【.NET】| 总结/Edison Zhou 此系列文章为我在2015年发布于博客园的.NET基础拾遗系列,它十分适合初中级.NET开发工程师在面试前进行一个系统的复习,因此我将其搬到公众号分享与你。 本文为第五篇,我们会对.NET的字符串相关考点进行基础复习,全文会以Q/A的形式展现,即以面试题的形式来描述。 1 StringBuilder有何作用? 众所周知,在.NET中String是引用类型,具有不可变性,当一个String对象被修改、插入、连接、截断时,新的String对象就将被分配,这会直接影响到性能。但在实际开发中经常碰到的情况是,一个String对象的最终生成需要经过一个组装的过程,而在这个组装过程中必将会产生很多临时的String对象,而这些String对象将会在堆上分配,需要GC来回收,这些动作都会对程序性能产生巨大的影响。事实上,在String的组装过程中,其临时产生的String对象实例都不是最终需要的,因此可以说是没有必要分配的。 鉴于此,在.NET中提供了StringBuilder,其设计思想源于构造器(Builder)设计模式,致力于解决复杂对象的构造问题。对于String对象,正需要这样的构造器来进行组装。StringBuilder类型在最终生成String对象之前,将不会产生任何String对象,这很好地解决了字符串操作的性能问题。 以下代码展示了使用StringBuilder和不适用StringBuilder的性能差异:(这里的性能检测工具使用了老赵的CodeTimer类) public class Program{ private const String item = “一个项目”; private const String split = “;”; static void Main(string[] args) { int number = 10000; // 使用StringBuilder CodeTimer.Time(“使用StringBuilder: “, 1, () =&…

    2021年5月30日