精华内容
下载资源
问答
  • 常见交互设计方法

    千次阅读 2019-03-22 09:57:00
    尽管交互设计跨越了无数类型的Web和移动应用程序和网站,有一些固定的方法是所有设计师都可以依赖的。我们将探讨一些比较常见的方法:目标驱动设计,可用性,五个维度理论,认知心理学和人机界面指南。 1. 目标驱动...

    尽管交互设计跨越了无数类型的Web和移动应用程序和网站,有一些固定的方法是所有设计师都可以依赖的。我们将探讨一些比较常见的方法:目标驱动设计,可用性,五个维度理论,认知心理学和人机界面指南。

    1. 目标驱动的设计

    目标驱动的设计是由艾伦·库珀在他的著作《囚犯正在逃出庇护:为什么高科技产品让我们疯狂,如何恢复理智》(出版于1999年)中推广的。艾伦定义了目标驱动的设计是指把解决问题作为最高优先级的设计过程。换句话说,目标驱动设计首先关注满足终端用户的具体需求和欲望,而不同于旧的设计方法只是专注于技术侧上的能力。

    今天来看,艾伦提出的一些观点是显而易见的,因为设计师很少会选择设计完全受制于技术发展约束的交互。然而,其核心的方法是满足最终用户的需要并想要的,也就是说就这一点对现在和曾经都是一样必要的。

    根据艾伦所说的,目标驱动的设计过程,需要作为交互设计师的我们进行五个思维方式的转变。

    1)先设计,再编程。换句话说,目标驱动的设计首先要考虑用户如何与产品交互,而不是以技术因素开始。

    2)独立开设计和编程的负责。这其中的必要性是,这样可以使交互设计师可以尽量拥护用户,而不去担心技术限制。一个设计师应该信任他或她的开发人员来处理技术方面的问题,事实上艾伦建议如此,否则会把设计师放在利益冲突的位置。

    3)设计师要对产品质量和用户满意度负责。虽然利益相关者或客户会有各自的目标,交互设计师出也对任何在屏幕的另一边的人有责任。

    4)为你的产品定义某个特定的用户。这个想法已经发展成为现在用户研究最通常的东西:角色模型。然而艾伦依旧不断提醒我们要把角色模型关联回产品,不断问自己:这个用户会在哪里使用这个产品?他或她是谁?他或她想要完成什么目标?

    5)结对工作。最后一点是,交互设计师不应该独自完成工作,而应该与他人协作,艾伦称其为关键的“设计沟通者”。虽然作为设计沟通者的艾伦,在1999年时的设想不过是一个典型的旨在提供营销产品副本的广告文字撰稿人,但到今天已经设计沟通者扩展到了包括项目经理、内容策略师、信息架构师等在内的许多其他人。

    2. 可用

    可用性感觉起来可能是一个模糊的概念,但其核心只是设计师的一个简单问题——“是不是谁都可以轻松使用这个产品呢?“。这个概念在无数的书籍和网络文章上解释过,我们将回顾一些不同的定义来发现一些共同的主题和细微的差别:

    在艾伦迪克斯,珍妮特芬利,拉塞尔比尔,格里高利阿柏德几个全著的书《人机交互》中,可用性被划分成三个原则:

    1. 易学性:新用户学会在系统中导航的容易程度如何?
    2. 灵活性:有多少种方法可以实现用户和系统的交互?
    3. 鲁棒性:我们对用户面对他们的操作错误时的支持做得怎么样?

    与此同时,由尼尔森和施耐德曼所解释的可用性是由五项原则构成的:

    1. 易学性:新用户学会在系统中导航的容易程度如何?
    2. 有效性:用户执行任务的速度如何?
    3. 记忆性:如果一个用户一段时间没有访问系统,他们对界面的记忆程度如何?
    4. 错误度:用户一共犯了多少错误,从错误中恢复的速度如何?
    5. 满意度:用户是否喜欢他们所使用的界面,以及他们是否对结果满意?

    最后,国际标准(ISO 9241)也把可用性这个词也分解成五项原则:

    1. 易学性:新用户学会在系统中导航的容易程度如何?
    2. 可理解性:用户对他们所看到的界面的理解程度如何?
    3. 可操作性:用户对界面的控制程度如何?
    4. 吸引度:界面在视觉上的吸引程度如何?
    5. 易用性的依从性:界面是否遵循了标准?

    显然,在这些解释中,我们能看出构成可用的界面是有一些共同的主题的,无论一个设计师依据的是哪条原则,在设计任何界面的时候可用性都是一个重要的考虑方面。

    3. 五维度理论

    在比尔莫格里奇的访谈书籍《设计交互》中,吉莉安史密斯,一位交互设计学者,介绍了关于“交互设计语言“的四维空间的概念,。换句话说,这些维度能够构成交互本身,因此它们最后形成了用户和屏幕之间的沟通。原来的四个维度是这样的:话语,视觉表征,物体或空间,以及时间。最近,凯文西尔韦,一位IDEXX实验室的资深交互设计师,增加了第五个维度,行为。

    1. 一维:话语应该尽量易于用户理解,用这样一种方式表达使信息能够轻松传达给最终用户。
    2. 二维:视觉表征一般都是图形或图像,基本上就是指一切非文本的东西。他们应该适量地被使用,而不是压倒。
    3. 三维:物理对象或空间指的是物理硬件,无论是鼠标和键盘,或者任何用户能与之交互的移动设备。
    4. 四维:时间是指用户与前三个维度交互所花费的时间长度。它也包括用户可能的用来衡量进展的方式,包括声音和动画。
    5. 五维:凯文西尔韦在他的文章《交互设计中的设计》中增加了行为这个维度。这是指用户与系统交互时产生的情绪和反应。

    通过使用这五个维度,交互设计师可以非常专注于用户与系统通信和连接时的体验。

    4. 认知心理学

    认知心理学是关于大脑如何工作,以其发生的心理过程的研究。根据美国心理协会的定义,这些过程包括了“注意力、语言的使用、记忆、感知、解决问题,创造力和思考”。

    虽然心理学是一个非常广泛的领域,认知心理学尤为重视其中的某些关键的元素,实际上,这可能帮助了交互设计领域的形成。唐诺曼在他的书《日常生活的设计》中提到了其中的很多概念。以下只是那些概念中的一部分:

    1)心理模型是指的在用户心中的一幅景像,使他们产生了对特定的交互或系统的期望。通过学习用户的心智模型,交互设计师可以创建出使用户有直观感觉的系统。

    2)界面隐喻是指利用已知的行为来引导用户产生新的行动。例如,大多数计算机上的垃圾桶图标都类似于现实中的垃圾桶,这是为了提醒用户做出预期的行动。

    3)功能可见性是指界面元素不仅是为了达到功能而设计出来的,而且也是为了让它们看起来像是可以达成功能而设计出来的。例如,按钮看起来像一个可以按的物体,这就是一个功能可见性的设计,使得不熟悉按钮的人仍能理解如何与之交互。

    5. 人机界面指南

    这部分内容其实有点不恰当,实际上是没有一整套完整的人机界面指南的。然而,创建人机界面指南背后的理念本身就是一种方法论。准则是由主要的技术设计企业,包括苹果和安卓、Java和微软等构建的。他们的目标都是一样的:用这些建议和推荐来提醒未来的设计师和开发者,这将帮助他们创建普遍意义上直观的界面和程序。

    日常任务和可交付成果

    在整个开发过程中交互设计师是一名关键的球员。他或她从事的一系列的活动都是项目团队的关键。这些活动通常包括形成设计策略、将关键交互做成线框图,以及将所有交互建立为产品原型。

    1. 设计策略

    虽然这个将会物的界限比较模糊,但有一点是肯定的:一个交互设计师需要知道自己在为谁设计,以及用户的目标是什么。通常情况下,这些信息会用户研究员提供。然后,交互设计师在独立或者受到团队中其他设计师的帮助的情况下,将会评估目标并形成设计策略。好的设计策略将帮助团队成员对在哪些需要的地方应该发生什么样的交互有一个共同的理解,以方便用户目标。

    2. 关键交互的线框图

    8jh20160219

    交互设计师在用于激励其设计的设计策略上有了好主意之后,就可以开始画草图,画出那些可以促进必要交互的界面。交互的妙门藏在细节中:在这个过程中,有一些专家会直接在纸板上素描,而有些则使用在线应用程序来帮助他们,而有的则会使用两者的组合。有一些专家会协同工作来创建这些界面,而有的则独自创建。这一切都取决于交互设计师自己的特定工作流。

    3. 原型

    根据项目的需要,交互设计师的下一个合乎逻辑的步骤可能涉及到创建原型。团队制作交互原型有许多不同的方法,比如html/css原型,或纸上原型,在这里,我们不会覆盖广泛的细节。

    4. 保持流行性

    对一个现实中的交互设计师来说,最难的部分是适应工业发展变化的速度。每一天,新的设计师都可能要在不同的方向上看待媒介。结果便是,用户也会预期这些新类型的交互会出现在你的网站上。谨慎的交互设计师会响应这种演变,不断探索在线交互以及利用新技术,但是我们总是要记住正确的交互或技术是最好地满足角色用户的需要的那些,而不只是最新颖或最令人兴奋的那些。交互设计师还通过在推特上跟随交互设计的思想领袖(比如下列的著名设计师)并主动推动媒介本身的发展,以保持流行性。

    转载于:https://www.cnblogs.com/DXYHW/p/10576435.html

    展开全文
  • 常见报文类型

    千次阅读 2019-05-31 19:22:34
      现有的XML主要应用在四个方面:一是应用于具有不同复杂格式的不同数据源间的交互;二是应用于大量运算负荷分布在客户端的情况,用户可以根据自己的需求选择和制作不同的应用程序以处理数据,而服务器只需发出同...

    1、超文本传输协议

      超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

    1> Request和Response的格式

    Request格式:
    HTTP请求行
    (请求)头
    空行
    可选的消息体
    注:请求行和标题必须以<CR><LF> 作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1 协议中,所有的请求头,除Host外,都是可选的。

    实例:

    GET / HTTP/1.1
    Host: gpcuster.cnblogs.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    If-Modified-Since: Mon, 25 May 2009 03:19:18 GMT
    

    Response格式:
    HTTP状态行
    (应答)头
    空行
    可选的消息体

    实例:

    HTTP/1.1 200 OK
    Cache-Control: private, max-age=30
    Content-Type: text/html; charset=utf-8
    Content-Encoding: gzip
    Expires: Mon, 25 May 2009 03:20:33 GMT
    Last-Modified: Mon, 25 May 2009 03:20:03 GMT
    Vary: Accept-Encoding
    Server: Microsoft-IIS/7.0
    X-AspNet-Version: 2.0.50727
    X-Powered-By: ASP.NET
    Date: Mon, 25 May 2009 03:20:02 GMT
    Content-Length: 12173
    ­消息体的内容(略)
    
    2> HTML

      文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言。
      一个网页对应于一个HTML文件,HTML文件以.htm或.html为扩展名。可以使用任何能够生成TXT类型源文件的文本编辑来产生HTML文 件。 超文本标记语言标准的HTML文件都具有一个基本的整体结构,即HTML文件的开头与结尾标志和HTML的头部与实体2大部分。有3个双标记符用于页面整 体结构的确认。

    <html>
    <head>
    <title>Document name goes here</title>
    </head>
    <body>
    Visible text goes here   404 file not found
    </body>
    </html>
    
    <a href="http://www.example.com/">This is a Link</a>
    <a href="http://www.example.com/"><img src="URL"
    alt="Alternate Text"></a>
    <a href="mailto:webmaster@example.com">Send e-mail</a>A named anchor:
    <a name="tips">Useful Tips Section</a>
    <a href="#tips">Jump to the Useful Tips Section</a>
    

    总结:HTML是超文本标记语言,HTTP是协议,HTML在HTTP协议上运行的;通过HTTP协议也可以传输声音、图像、数据。等等。

    2、XML报文

      XML为Extensible Markup Language的缩写,即可扩充标注语言。它是由SGML所精简而来的一种通用标注语言,主要是要简化SGML烦杂的结构,强化HTML过于简单而不够严谨的语法。微软是XML技术的推动者之一,它希望能够建立一个可以为WWW 广泛使用语言环境,推动程序的兼容与协同,从而降低成本,刺激增长。
      虽然XML创立之初只是被当作一项基础技术,但其发展早已超出设计者原先的构想。不论是学术界还是商业界都将其视为下一代网络的基石。XML现在已经成为一股不可抵挡的技术潮流。
      现有的XML主要应用在四个方面:一是应用于具有不同复杂格式的不同数据源间的交互;二是应用于大量运算负荷分布在客户端的情况,用户可以根据自己的需求选择和制作不同的应用程序以处理数据,而服务器只需发出同一个XML文件;三是应用于将同一数据以不同的形式表现出来;四是应用于网络代理对所取得的信息进行编辑、增减以适应个人用户的需要,形成具有个人特色的数据文件。
      事实上,XML技术的潜能还远未被充分挖掘。据一份最新的研究指出,以XML为基础的内容生命周期产品,将在今后5年以10倍的速度快速成长,在2008年达到116亿美元的营业规模。以XML和Web服务为主的研究公司Zap Think在研究报告中也指出,这些以XML为基础并包括Web服务的工具,是将旧有系统再度激活的新希望。
      “XML最大的影响在于XML软件大量兴起:XML剖析器、XML程序语言库、XSLT处理器、XSL FO处理器、数据库接受XML——不只如此,还有网络浏览器也接受XML。”XML工作小组创始会员C.M. Sperberg-McQueen如是认为。也正因为如此,IBM、微软、SUN、惠普、Oracle等大公司纷纷进入这个市场。
      而在XML最大应用之一的数据格式转换领域,Adobe、微软、Core都在各自相关的软件产品中充分利用了XML技术。以程序关联为特色的Office 2003更是将XML的格式转换特性发挥到了极致,以至于这个软件套装几乎成为了一个独立的数据系统。

    <!DOCTYPE project [
     	<!ENTITY Common SYSTEM "common.xml">
    	%Common;
    ]>
    
    <!--
      Bouncy Castle Build Configuration (midp)
    
      This is the JDK 1.1 specific build file.  
    
      $RCSfile: jdk11.xml,v $
      $Author: bouncy $
      $Date: 2005/07/06 13:02:52 $
      $Revision: 1.1.1.1 $
    -->
    <project name="jdk11" default="init" basedir=".">
    
    	<property environment="env" />
    	<property file="${env.CRYPTO_PROP}" />
    
    	<!-- Public callable targets -->
    	<target name="clean" depends="common-clean" />
    	<target name="test" depends="common-test" />
    	<target name="dist" depends="common-dist" />
    	<target name="package" depends="common-package" />
    	<target name="compile" depends="init, local-compile" />
    	<target name="jdoc" depends="common-jdoc" />
    
    	<!-- include common targets, properties -->
    	<property name="master.jdk" value="jdk11" />
    	&Common;
    
    	<!-- ** Private properties -->
    	<patternset id="jdk11.lw-compatibility" >
    		<include name="java/**" />
    	</patternset>
    
    	<patternset id="jdk11.jce-compatibility">
    		<include name="org/**" />
    	</patternset>
    
    	<patternset id="jdk11.lw-extras" >
    		<include name="org/bouncycastle/crypto/test/*.java" /> 
    	</patternset>
    
    	<patternset id="orgbc.javax">
    		<include name="javax/**" />
    	</patternset>
    
    	<patternset id="orgbc.lw-source" >
    		<include name="org/bouncycastle/math/ec/*.java" />
    		<include name="org/bouncycastle/crypto/**" />
    		<include name="org/bouncycastle/util/**" />
    		<include name="org/bouncycastle/asn1/**" />
    	</patternset>
    
    	<patternset id="orgbc.jce-source" >
    		<include name="org/bouncycastle/jce/**" />
    		<exclude name="org/bouncycastle/jce/netscape/*" />
    		<exclude name="org/bouncycastle/jce/provider/X509CertificateObject.java" /> 
    		<exclude name="org/bouncycastle/jce/provider/RSAUtil.java" />
    		<exclude name="org/bouncycastle/jce/provider/JDKX509CertificateFactory.java" /> 
    		<exclude name="org/bouncycastle/jce/provider/test/RSATest.java" /> 
    		<exclude name="org/bouncycastle/jce/provider/test/RegressionTest.java" /> 
    		<!-- to make the friggin thing compile -->
    		<exclude name="org/bouncycastle/jce/provider/test/DSATest.java" /> 
    		<exclude name="org/bouncycastle/jce/provider/test/DHTest.java" /> 
    		<exclude name="org/bouncycastle/jce/provider/test/Netscape*.java" /> 
    		<exclude name="org/bouncycastle/jce/provider/test/Named*.java" /> 
    	</patternset>
    
    	<property name="build.compiler" value="classic" />
    	<property name="bcp" value="${env.JAVA_HOME}/lib/classes.zip" />
    
    	<path id="compile.cp">
    		<pathelement location="${master.classes}" />
    		<pathelement location="${bcp}" />
    	</path>
    
    	<target name="local-compile" depends="llw-compile, ljce-compile" />
    
    	<!-- extra targets used in this file -->
    	<target name="llw-compile" if="is.lw">
    		<echo message="jdk11.lw-compatibility" />
    		<javac srcdir="${master.home}/jdk1.1"
    			destdir="${master.classes}" 
    			includeAntRuntime="no"
    			includeJavaRuntime="no"
    			debug="off"
    			optimize="off"
    			target="1.1">
    			<patternset refid="jdk11.lw-compatibility" /> 
    			<classpath refid = "compile.cp" />
    		</javac>
    
    		<echo message="orgbc.lw-source" />
    		<javac srcdir="${master.src}"
    			destdir="${master.classes}" 
    			includeAntRuntime="no"
    			includeJavaRuntime="no"
    			debug="off"
    			optimize="off"
    			target="1.1">
    			<patternset refid="orgbc.lw-source" /> 
    			<classpath refid = "compile.cp" />
    		</javac>
    
    	</target>
    
    	<target name="ljce-compile" if="is.jce" >
    		<!-- cheat a bit here to remove duplication -->
    		<antcall target="llw-compile">
    			<param name="is.lw" value="true" />
    		</antcall>
    
    		<!-- now do the extra bits for the JCE -->
    		<echo message="orgbc.jce-source" />
    		<javac srcdir="${master.src}"
    			destdir="${master.classes}" 
    			includeAntRuntime="no"
    			includeJavaRuntime="no"
    			debug="off"
    			optimize="off"
    			target="1.1">
    			<patternset refid="orgbc.javax" /> 
    			<patternset refid="orgbc.jce-source" /> 
    			<classpath refid = "compile.cp" />
    		</javac>
    
    		<echo message="jdk11.jce-compatibility" />
    		<javac srcdir="${master.home}/jdk1.1"
    			destdir="${master.classes}" 
    			includeAntRuntime="no"
    			includeJavaRuntime="no"
    			debug="off"
    			optimize="off"
    			target="1.1">
    			<patternset refid="jdk11.jce-compatibility" /> 
    			<classpath refid = "compile.cp" />
    		</javac>
    
    	</target>
    </project>
    

    3、JSON

      JSON,全称是JavaScript Object Notation。它是基于JavaScript编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级的数据交换格式,主要用于用于跟服务器进行交换数据。跟XML相类似,它独立于语言,在跨平台数据传输上有很大的优势。
      上面是百科的解释,可以说明json大概的意思和作用,json其实就是键值对存储数据,举个例子:var a ={"one":"一","two":"二","three":"三"},a就是一个json,a.one的值就是一,还可以内嵌数组var b={"A":"[1,2,3,4,5,6,7]","B":"[a,b,c,d,e]"},b.A[0]的值就是1,json变量里面还可以内嵌json,可以内嵌数组,取值方法就是如上面的那种,数组用下标,json取键值对的名,使用起来很方便,数据存储格式简洁。

    4、自定义报文

    展开全文
  • 阿里云交互式分析(Holo)是一种数仓查询加速方案,支持JDBC模式。本文介绍其用法和常见问题。

    阿里云交互式分析(Hologress),可用于数仓查询加速。

    因其底层采用(借鉴)了postgreSQL引擎,所以在语法、问题解决方案上,有很多是互通的。
    其jdbc配置方式与PG完全一致,可参考《JDBC连接PostgreSQL》

    下面列举常见问题。

    下列问题从2020年1月开始陆续整理。考虑官方会陆续优化,问题和方案存在过时可能。
    建议先按官方文档使用和排查,如未解决再通过本文解决问题。

    实例管理

    关联MaxCompute项目

    HoloStudio中,找不到MaxCompute项目

    Holo实例使用前,需与MaxCompute关联。
    在关联前,可以在Holo中先建立一个真正要用的数据库,提高关联操作的效率。

    下面开始关联MaxCompute项目和Hologress实例。

    MaxCompute项目首次配置Holo

    如果工作空间是首次配置Holo,需要开通Holo服务,要在MaxCompute工作空间列表中处理:
    在这里插入图片描述
    在这里插入图片描述
    点击下一步,会进入Holo实例关联页面。关联页面的操作逻辑,见下个章节的介绍。

    非首次开通Holo

    如果是已经开通过Holo的项目,有两种方式进入Holo关联:

    1. MaxCompute工作空间列表中,点击“工作空间配置",在新窗口点击更多配置,进入工作空间管理。
      在这里插入图片描述
    2. 在HoloStudio中,点击右上角工作空间管理,进入MaxCompute工作空间管理
      在这里插入图片描述

    两种方式最终都会进入工作空间配置页面。在该页面中,可以找到交互式分析的配置,直接绑定交互式分析DB,参见下图:
    在这里插入图片描述
    点击绑定,会打开Holo实例关联的窗口。关联页面的操作逻辑,见下个章节的介绍。

    关联配置

    在弹出窗口输入信息,即可完成绑定。
    在这里插入图片描述

    MaxCompute项目无法开通Holo服务

    前面提到过Holo中使用MaxCompute项目,需要提前在MaxCompute项目中关联Holo服务。
    如果你在MaxCompute项目关联Holo时,选择Holo实例的下拉框无内容、但实际上有Holo实例,可能是因为该实例已经被其他项目配置。

    在Holo的设计上,Holo实例/库,与MaxCompute项目是多对多的关系。
    但暂时页面上只支持一对一配置:即一旦一个Holo实例关联了MaxCompute项目,则不能被其他项目关联。
    阿里云正在优化该配置,同时一旦Holo实例关联过MaxCompute项目,那么该阿里云账号下、同地域的项目都可以直接使用了。
    在这里插入图片描述

    若无Holo实例请先行购买。有否实例可在Holo实例列表中查看

    HoloStudio

    存在多个Holo实例,在studio中怎么找不到第一个实例

    在数据开发中的文件夹中、以及PG管理中,会显示所有Holo实例的库。
    在这里插入图片描述 在这里插入图片描述
    如果新建的实例没有Holo库,那么这里是不会显示的。

    另外该页面有比较顽固的缓存,建议清理cache后刷新页面查看。

    清理缓存有个快速的方式:打开chrome devtools,在network中选中disable cache。以后每次刷新页面时先打开devtools、再刷新页面即可。
    在这里插入图片描述

    数据开发的文件夹展开后没有内容

    如果确定文件夹下添加过内容,那么很可能你遇到了一个页面处理的bug。

    有两种方式处理:

    1. 打开chrome devtools,在network中选中disable cache。以后每次刷新页面时先打开devtools、再刷新页面即可。
      在这里插入图片描述
    2. 进入HoloStudio后,不要做任何操作,先进入PG管理、展开表。再回到数据开发,展开文件夹即可看到内容。亲测过该方法有效,但偶尔也会失败,所以个人推荐第一种方法。

    我的理解这是阿里云页面的BUG,但官方尚未反馈有修复计划。

    账号权限

    下列权限问题,在2020年2月前尚未支持。官方有优化计划,具体见阿里云通知。

    专家模式与简单权限模式的区别

    简单权限模式有预置的角色/权限组,可以通过将用户添加到角色/权限组,快速实现用户权限设置。
    专家模式则只有默认的权限项,你可以给任意用户设置任意权限,也可以自己做角色/权限组、实现类似简单权限的模式。

    总结:

    • 前者可以快速上手、能满足大部分DB日常管理需要。可通过Holo实例管理页面完成授权管理,也可以通过命令行管理。
    • 后者灵活,适合管理复杂多样的场景。只能通过命令行管理。

    账号不存在

    Caused by: org.postgresql.util.PSQLException: FATAL: role "RAM$xxx@xxx.com:xx_user" does not exist
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2497)
    	at org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2618)
    	at org.postgresql.core.v3.QueryExecutorImpl.<init>(QueryExecutorImpl.java:135)
    	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:250)
    	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    	at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
    	at org.postgresql.Driver.makeConnection(Driver.java:458)
    	at org.postgresql.Driver.connect(Driver.java:260)
    	at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:39)
    	at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:256)
    	at org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2301)
    	at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2287)
    

    上面这个问题,表示没有用户和角色(用户和角色的区别到底是啥呢?都是create user,是按能否登陆区别user和role?但权限的部分完全一样?)。
    实际上已经用官方文档说明的create user "p4_账号uid(RAM页面获取的xx_user的uid)";方式添加过用户;看到这个提醒,怀疑上面这个无效,用CREATE USER "RAM$xxx@xxx.com:xx_user"的方式再添加了一遍,就不提示无用户了。

    没有表权限

    上面问题解决后,又遇到了java.sql.SQLException: ERROR: permission denied for foreign table xxx错误。

    先检查holostudio权限的配置:
    我是通过GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC;的方式给所有用户授权了,在HoloStudio运行SQL查询是正常的。

    • to PUBLIC是指授给所有用户;
    • holo目前还不支持create schema,默认的schema是public。这个schema与mysql的schema不是一个概念:MySQL schema等同于database,holo的schema与其他对象的关系如下:
      在这里插入图片描述

    在jdbc中还是会报错。最终在url中添加preferQueryMode=simple&tcpKeepAlive=true参数后,权限正常。

    语法

    Holo不支持`字符和COMMENT关键字

    `字符直接去掉即可,Holo的保留字限定范围很小,几乎不会重复。
    COMMENT去掉。

    表和数据类型

    Holo外部表与ODPS表列无需完全对应

    无需对应的部分是指:

    • 外部表的字段可以比ODPS表少
    • 外部表名称与ODPS表无需保持一致

    需要严格对应的部分有:

    • 外部表与ODPS表的分区列一定要一致
    • 外部表中列的类型与ODPS表的列要保持一致

    注意:201903最新测试发现,HOLO表与ODPS表的列顺序要保持一致,否则查询所有列时(select *)会报错,指定列查询则无该问题。
    错误日志类似这样:

    执行失败,失败原因:ERROR: Query:[20010311602666746] Get result failed: 
    		expected column type Oid:25, however real type Oid:20 of data row whose column index:1
    

    HoloStudio的pg管理支持一键映射外部表,但容易出错

    一旦有类型映射不同,pg管理中会直接报错。

    • 这里支持的类型与实际支持类型会有出入。
    • 会映射全部字段,如果odps表存在holo不支持的类型、但其实Holo本身也不需要的字段,会导致映射失败。

    因为上述问题,使用一键映射要注意类型问题。 如果暂时建议还是使用数据开发手工组织ddl脚本。如果有一天该功能支持了自动更新schema,可以再用起来。

    一键映射外部表,不支持指定schema

    一键映射页面并未提供单独指定schema的输入框,但我们可以在输入holo表名时加上schema作为前缀,如下图:
    在这里插入图片描述
    看生成的ddl,可以确定这个方式的脚本是可行的。
    但holo studio编辑器显示有些问题,创建完会显示挂在public schema下面,点一下pg管理的刷新按钮即可。

    数据类型1

    ODPS2开始,已经新增了较多的数据类型,如tinyint、date、decimal等。但Holo对ODPS的支持并未完全同步,官方文档说明了映射关系:
    在这里插入图片描述
    但实测后有如下问题:

    不支持tinyint、smallint类型

    holo完全不支持这三种类型:
    tinyint和smallint,需要在odps表中的列类型改为int或bigint,才能通过holo访问表。

    官方文档说smallint可以转化为int2,亲测尚未支持。

    注意:
    odps表的类型一定要改掉。odps不改、只在holo ddl中修改,虽然Holo外部表可以建立,但执行时会报错:ERROR: Query:[20051919746691163] Get result failed: expected column type Oid:23, however real type Oid:21 of data row whose column index:1

    不支持date类型

    date类型建议在odps表改为STRING或DATETIME。

    在holo ddl中直接声明为date不会报错,但一旦使用该列作为条件或结果,会报错:
    ERROR: Query:[20032452110981017] Get result failed: exec sql failed => status:7 msg:ERROR: AXF Exception: Open ORC file failed for schema mismatch. Reader schema: column_xxx1:VT_INTEGER,column_xxx2:VT_INTEGER,column_xxxn:VT_INTEGER
    这个错误是看不出任何关系的,查了好久。

    不支持DATETIME类型,但可以转化为TIMETAMPTZ

    即带时区的时间类型,timestamptz等价于timestamp with tz

    不支持STRING类型,但可以转化为TEXT

    语义和效果一样,只是关键字的区别。

    精度问题

    Holo外表使用numeric和decimal时,对精度无严格校验。但内表会严格校验精度,如果未写精度则会报错:
    [Parsing Error]: Please always specify the precision and scale explicitly(0 <= scale <= precision, 0 < precision <= 38)
    如果odps表只是使用了BigDecimal,并无特殊精度设计,Holo中对应的类型可声明为numeric(38,18)

    常见的类型声明错误

    • 如果是HOLO不支持的类型,在holoStudio写DDL时就会提示。
    • 如果是ODPS类型与HOLO类型映射错误,在SQL运行时才会提示,错误日志如下:
      ERROR: Query:[20051919746691163] Get result failed: expected column type Oid:23, however real type Oid:21 of data row whose column index:1

    性能问题

    不要使用默认数据库postgres

    holo实例默认会建一个postgres库,但该库分配资源少。
    官方建议新增一个数据库用来处理实际业务,可参考《在HoloStudio中新增数据库》

    如果在HoloStudio中看不到新增的库,可能有两个原因:

    • 没有刷新HoloStudio页面
    • 新增库后,删掉了postgres库的关联,可能会导致该问题

    扫描分区数默认不超过50个

    如果执行SQL时遇到下面的报错:

    ERROR: Query:[20011148508652324] Get result failed: 
    	exec sql failed => status:7 msg:
    		ERROR:  AXF Exception: specified partitions count in odps table: odps_workspace.table_xxx is: 89, 
    		        exceeds the limitation of 50, please add stricter partition filter or set axf_odps_partition_limit.
    

    这表示你扫描的分区超过了默认限定的50
    Holo出于检索效率、内存资源的考虑,限制扫描分区数默认不超过50个,最大不能超过1024个。
    对于这个限制有几种解决方式:

    • 优化分区裁剪

    • 使用cluster table替代分区
      odps的cluster table,多bucket可以实现并行计算,只是不能像分区可以重建。按业务情况选用

    • 调大默认配置,如使用命令set seahawks.axf_odps_partition_limit = 512,或联系阿里云技术支持后台调整。
      使用命令注意:

      • 命令对session有效,意味着每次查询前都要执行。
      • 该命令在HoloStudio终端菜单中可执行、SQL开发中不能执行。JDBC在执行查询语句前,先执行该句。

      MyBatis中在sql前加上这句是不行的,需要使用同个连接、在执行sql前单独执行一次该语句。

      该方式的问题在于:扫描的分区多了,查询时性能肯定会变差,这个要做好权衡。

    • 外部表改为内部表
      按官方说法,内部表效率比外部表高十倍,亲测过同样的sql通过内表查询能提升3~10+倍,不过也要结合后台资源分配来看。
      使用内部表,需要配置odps到holo的数据同步任务,并且需按分区指定增量同步。这上面会有额外的开发工作,也需要单独购买Holo的存储资源。

    外部表查询容易OOM

    如果你遇到了如下错误,则表示holo内部出现了OOM异常:

    ### Cause: java.sql.SQLException: 
    	ERROR: Query:[10001157026468764] Get result failed: exec sql failed => status:7 msg:
    		ERROR:  Error dispatching to seg123 11-199-8-163.changba-102-hm.default.svc.cluster.local:22342 pid=55615: (dispatcher.c:1874)
    				 SQL: [select xxx from table_xxx where xxx;]; 		
    				 uncategorized SQLException for SQL []; SQL state [XX000]; error code [0]; 
    				 	ERROR: Query:[10001157026468764] Get result failed: exec sql failed => status:7 msg:ERROR:  Error dispatching to seg123 11-199-8-163.changba-102-hm.default.svc.cluster.local:22342 pid=55615: (dispatcher.c:1874)
    
    • 后台调整外部表分配比例
      要联系小二评估实际情况,决定是否给调整
    • 提高holo实例配置

    资源占用超过规格报错

    执行一个SQL遇到了如下报错:

    ERROR:  XX000: Query:[10140720581564794] 
    	Get result failed: exec sql failed => status:7 msg:
    LOCATION:  HoloExecutorRun, holo_backend.cpp:575
    

    沟通小二确定是执行SQL时调用的资源超过了规格占用资源报错。
    实际上Holo的CPU资源是共享的,超过一点没关系,但我的超过了20%、而且执行了很久,所以被终止了。

    HOLO服务端问题

    could not translate host name "xxx" to address: Name or service not known

    遇到过一个Holo服务端在调整、导致holo查询报错的问题:

    connect [xxx-in-shanghai-117-shkm.default.svc.cluster.local:22340] failed:could not translate host name "xxx-in-shanghai-117-shkm.default.svc.cluster.local" to address: Name or service not known
    

    该问题原因是服务端在调整配置,重启生效期间会出现该错误。

    An I/O error occurred while sending to the backend

    该问题原因可能比较多,服务端进程挂掉就会抛出这个错误。
    列举几个目前遇到过的问题:

    • odps表有三级分区,holo外表查询报错。该问题阿里云反馈已修复。
    • odps表有多级分区,但holo外表只映射了部分。当sql查询时,如果实际扫描分区超出限制,不会报扫描分区数超限,反而会报IO异常。
    • 其他未知情况可能导致的服务端进程挂掉,猜测可能有负载过高等等。

    费用问题

    通过Holo外表查询MaxCompute(ODPS)的数据,不会在ODPS产生任何费用。

    Holo自身按存储和计算资源收费,建议购买前做一些压测确定所需规格。
    定价链接见:https://help.aliyun.com/document_detail/113666.html,最早按年并没有优惠,购买时多留意下。

    另附阿里云产品的优惠链接,有需要的自取。

  • 阿里云¥2000红包
  • ECS 8月特惠2折,低至¥500/台/三年
  • ECS 3折特惠,低至¥300/台/年

  • 以上。感谢您的阅读。

    待更新:

    • 添加更多新问题和解决方案

    1. Hologress数据类型 ↩︎

    展开全文
  • 应用系统中常见报表类型解析

    千次阅读 2014-04-24 14:38:18
    根据报表的布局、数据源结构、打印方式和数据分析方式,可将应用系统中的报表分为以下类型:清单报表 、图表报表 、分栏报表 、分组报表 、交叉报表 、并排报表 、主从报表 、套打报表 、交互式报表。

    根据报表的布局、数据源结构、打印方式和数据分析方式,可将应用系统中的报表分为以下类型:

    • 清单报表
    • 图表报表
    • 分栏报表
    • 分组报表
    • 交叉报表
    • 并排报表
    • 主从报表
    • 套打报表
    • 交互式报表

     

    (一)清单报表

    清单报表主要用于列举数据,比如:销售清单、客户清单、设备清单、费用清单、商品清单等。在实现这类报表时可用到表格、列表、文本框、图像、条码等控件。实现步骤

    基于表格布局的清单报表

    image

    基于任意布局的清单报表

    image

    (二) 图表报表

    图表在应用系统中随处可见,将数据以图表的方式呈现,可更好的分析数据之间的关系,数据的发展趋势。图表通常包括图例、坐标轴、绘图区等区域,常见的图表类型有:柱形图、折线图、饼图、条形图、面截图、散点图、股价图、曲面图、圆环图、气泡图、雷达图等,各种类型还可细分为二维和三维显示效果。实现步骤

    image

    (三) 分栏报表

    分栏报表每条数据的显示区域比较小,通过分栏可充分利用报表绘制区域,该类型的报表也可细分为横向分栏和纵向分栏两种结构。常用于简单列表打印、条码打印、商品标签打印、邮寄信息打印等。实现步骤

    横向分栏

    image

    纵向分栏

    image

    (四) 分组报表

    分组报表主要是为了对数据进行分类显示,便于实现数据的汇总,分组报表根据分类条件的数据可分为单条件分组和嵌套分组。比如:商品信息分类统计。实现步骤

    image

    (五) 交叉报表

    交叉报表是按照行、列两个维度分类汇总数据的一种报表结构。与分组报表不同之处是,分组报表只对数据按照行进行分类汇总;与分组报表相似之处是,交叉报表的行、列均支持单条件分组和嵌套分组。

    以下交叉报表中,列方向按照产品类别和产品名称进行分组;行方向按照销售年和月进行分组。实现步骤

    image

    (六) 并排报表

    并排报表是将报表按照纵向分为多个不同的布局的区域,每个区域可设置单独的数据源。下图中的报表左侧是一个任意布局的清单报表,右侧是一个基于表格布局的清单报表。查看实现步骤。在线演示

    image

    (七) 主从报表

    主从报表主要用于显示一对多结构的数据。以订单为例,一个订单对应一个客户信息,一个订单可能对应多个产品信息。在线演示

    image

    (八) 套打报表

    套打报表主要用于制式报表的打印,报表的整体格式、每个数据的打印位置都有严格要求,打印时只需将数据打印到指定的位置。常见的有:财务发票打印、发货运单打印、提货单打印等。实现步骤

    预览效果

    image

    打印数据

    image

    (九) 交互式报表

    交互式报表主要满足用户按需分析报表数据需求,通常包含向下钻取、贯穿钻取、数据过滤、数据排序等方式。这种类型的报表通常在一级报表中显示汇总数据,用户可根据自己的需要钻取到二级详细页面中。查看实现步骤。完整说明。

    Drill_Through_Chart

     

    展开全文
  • 常见的Web实时消息交互方式和SignalR

    千次阅读 2018-04-12 16:21:00
    前言最近因为项目中涉及到了实时数据的传输,特地去了解了一下当前Web应用中常见的实时交互手段,当然一开始也不仅限于Web客户端。从c#自带的Socket类,到Html5中的WebSocket,再到Asp .Net利器SignalR,总算将这块...
  • JavaScript常见事件类型

    千次阅读 2018-08-09 14:15:38
    UI (User Interface) 事件,当用户与页面上的元素交互时触发 Load事件:当页面完全加载后,就会触发window上的load事件。 Unload事件:在文档被完全卸载后触发。只要用户从一个页面切换到另一个页面,就会触发。 ...
  • 常见漏洞类型汇总

    万次阅读 2018-11-06 16:33:57
    常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。    (3)DOM跨站(DOM XSS):是一种发生在客户端...
  • 接口测试(一)常见接口类型

    万次阅读 2019-04-19 16:24:33
    介绍接口测试之前,本文先介绍一下接口的概念及常见的接口类型。 接口是指外部系统与系统之间以及内部各子系统之间的交互点。包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口、同级接口。 常见web...
  • web实现数据交互的几种常见方式

    千次阅读 2018-10-09 18:32:36
    前言  在当今社会,作为一名前端程序猿,并不是一昧的去制作静态页面就可以满足滴;你说你会制作网页,好吧,只能说你...今天,就带大家一起了解一下web前端实现数据交互的几种方式;   一、Ajax 作为一个...
  • 常见报表类型解析 根据报表的布局、数据源结构、打印方式和数据分析方式,可将应用系统中的报表分为以下类型: 清单报表图表报表分栏报表分组报表交叉报表并排报表主从报表套打报表交互式报表 (一)清单报表 ...
  • 常见的Shell 类型

    千次阅读 2016-09-20 22:26:58
    Shell(壳)是一种用C语言编写的程序(命令解析器),是用户连接Unix/Linux内核的桥梁,它通过调用系统核心的大部分...作为命令语言,它类似于Windows下的cmd.exe,可以交互式地解释和执行用户输入的命令;作为程序设计
  • 常见软件测试类型分类

    万次阅读 2018-09-20 09:48:05
    软件测试类型 1)回归测试 回归测试: (regression testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新...
  • Chapter5 交互设计测试与评估 第一章 为什么要开展测试与评估 用户测试:请目标用户使用产品来完成任务,观察并记录用户使用产品的整个过程. 用户测试的定义:也被称为产品可用性测试,指特定的用户在特定的使用...
  • Table of Contents 第一章 应用程序主状态机 第二章 常见的消息交互流程 第一章 应用程序主状态机 第二章 常见的消息交互流程
  • 再看语音交互设计

    千次阅读 2019-08-20 22:02:00
    声音一直是人与人沟通的核心,而今也成为了人机交互的核心——智能语音交互。早在2016年,google声称其搜素请求中有20%是通过语音完成的。但是,语音交互设计并不是新兴的技术,在20多年前老码农刚刚参加工作的时候...
  • 几种常见的shell类型

    千次阅读 2016-08-28 11:42:11
    Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。    (4) Bourne Again Shell  (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell...
  • 前端交互的正确打开方式

    千次阅读 2018-07-03 02:46:02
    作为一个前端工程师,与后台交互是我们日常工作的一部分,交互虽然很简单,但其中往往会遇见各种各样的问题,本场 ...交互常见问题处理(如跨域)。 关键词:交互,Header,跨域,Content-Type,状态码,数据格式。...
  • 序列图交互建模中的常见错误及其纠正方法。   常见错误 纠正错误 举例 不将序列图中的对象映射到类图中的类 确保序列图中的每个对象在类图中都有相应的类 - 设计...
  • 交互设计原则

    千次阅读 2014-06-10 15:49:43
    交互设计原则:常见附加工作陷阱 不要强迫用户到另外一个窗口中完成影响本窗口的功能; 不要强迫用户记住他将事物放在层次文件系统中的哪个位置; 不要强迫用户调整窗口大小,当窗口在屏幕上弹出时,程序应该为其...
  • Qt中UI线程与子线程的交互

    千次阅读 2020-03-29 00:27:48
    0.前言 GUI框架一般只允许UI线程操作界面...1.Qt中几种常见的多线程交互的操作 Qt中提供了一些线程安全的方法来让我们使用: A.使用信号槽 Qt的信号槽是线程安全的。connect函数的第五个参数ConnectionType默...
  • 《 人机交互技术》第三章 交互设备

    千次阅读 2018-06-18 13:05:23
    第三章交互设备(输入、... 文本输入是人与计算机交互的一个重要的组成部分,键盘是最常见和最主要的文本输入方式。  (1)键盘:文本输入最重要的手段  QWERT键盘、DUQRAK键盘、人体工程学键盘、多功能集成...
  • post请求几种常见content-type类型

    千次阅读 2019-11-08 13:57:23
    这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。数据按照 key1=val1&key2=val2 的方式进行编码...
  • 物联网常见的无线传输协议类型

    万次阅读 2018-03-05 15:38:04
    下面就来看看物联网中常见的无线传输协议类型: RFID RFID(Radio Frequency Identification),即射频识别,俗称电子标签。它是一种非接触式的自动识别技术,通过射频信号自动识别目标对象并获取相关数据。 RFID由...
  • 本文简要介绍了在Windows平台上安装LaTex工具的基本方法和流程以及LaTeX常见的文件类型。 1、下载MiKTeX,下载地址为:http://miktex.org/download。 MiKTeX的正确读音为/'mik'tek/。 2、安装...
  • 应用系统中交互式报表功能解析

    千次阅读 2014-04-24 14:46:48
    从报表需求的整个发展历程来看,可以分为...2、交互式报表:解决终端用户分析数据的需要,通常会用到数据可视化、向下钻取、贯穿钻取、数据过滤、数据排序等功能。这篇文章主要介绍交互式报表中常用到的数据分析方法。
  • 从零开始学习WEB前端之数据交互(Ajax)

    万次阅读 多人点赞 2017-04-14 17:32:23
    数据交互 ajax

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,003
精华内容 98,401
关键字:

常见的交互类型