Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 懒加载数据一个骨架屏幕。可能吗?_Sql_Database_Performance_Database Design_Information Retrieval - Fatal编程技术网

Sql 懒加载数据一个骨架屏幕。可能吗?

Sql 懒加载数据一个骨架屏幕。可能吗?,sql,database,performance,database-design,information-retrieval,Sql,Database,Performance,Database Design,Information Retrieval,我一直在读特德·纽沃德的文章。虽然有很多我不理解,或者没有完全理解,但在阅读这一段时,我被一个想法打动了 部分对象问题和加载时间悖论 人们早就知道,网络遍历(如在发出传统SQL请求时所做的遍历)需要花费大量的时间来处理。。。这一成本显然不是微不足道的,因此,开发人员通过优化往返次数和检索的数据来寻找最小化这一成本的方法 在SQL中,这种优化是通过仔细构造SQL请求来实现的,确保只检索所需的列和/或表,而不是整个表或表集。例如,在构建传统的深入用户界面时,开发人员会显示所有记录的摘要显示,用户可以

我一直在读特德·纽沃德的文章。虽然有很多我不理解,或者没有完全理解,但在阅读这一段时,我被一个想法打动了

部分对象问题和加载时间悖论

人们早就知道,网络遍历(如在发出传统SQL请求时所做的遍历)需要花费大量的时间来处理。。。这一成本显然不是微不足道的,因此,开发人员通过优化往返次数和检索的数据来寻找最小化这一成本的方法

在SQL中,这种优化是通过仔细构造SQL请求来实现的,确保只检索所需的列和/或表,而不是整个表或表集。例如,在构建传统的深入用户界面时,开发人员会显示所有记录的摘要显示,用户可以从中选择一条记录,一旦选择,开发人员就会显示该特定记录的完整数据集。例如,考虑到我们希望对前面描述的Persons关系类型进行深入研究,要进行深入研究的两个查询是,按顺序(假设选择了第一个查询):

特别要注意的是,只检索流程每个阶段所需的数据——在第一次查询中,检索必要的摘要信息和标识符(在后续查询中,如果姓名不足以直接识别此人),在第二次查询中,检索要显示的剩余数据。。。这种能够返回表的一部分的概念(尽管仍然是关系形式,这对于上面描述的闭包原因很重要)是以这种方式优化这些查询的基本能力——事实上,大多数查询只需要完整关系的一部分


骨架筛 骨架屏幕是Luke Wrobleski在2013年引入的一个相对较新的UI设计概念。它鼓励避免使用微调器来指示加载,而是在加载期间逐步构建UI元素,这会让用户感觉事情进展很快,并且正在取得进展,即使事实上比使用传统加载指示器时慢

这是一个在微软团队聊天应用程序中使用的框架屏幕。它在等待数据库中存储的聊天日志到达时显示此信息


利用骨架屏幕样式的数据加载作为数据检索的范例 当Neward的论文集中在对象关系映射器上时,我想到了结构化数据检索

上面引用的段落表明一次查询太多数据的困难,增加了数据检索时间,直到收集到所有指定的数据。与上面Neward的SQL示例类似,如果根据需要检索较小的数据块,并将其逐段加载到应用程序中,该怎么办

我认为,这将需要数据库查询逻辑的根本性转变。在应用程序代码中实现这一点显然是一个荒谬的建议。让您的日常开发人员编写一个多层检索方案来检索单个对象将是愚蠢的。相反,需要某种内置方法,开发人员可以通过该方法指出哪些属性是必需的(用户名、Id、权限、角色等),哪些属性在继续之前必须完全检索,哪些属性是辅助的。毕竟,如果许多应用程序用户熟悉应用程序并且只需要导航到某个页面,那么他们在应用程序中的导航速度比所有数据都要快。他们只需要加载足够的数据,这就是这个方案的要点

在数据库方面,可能会有一系列较小的检索,而不是较大的检索。我知道这可能更昂贵,尽管我不确定技术细节,虽然数据库性能可能会受到影响,但应用程序性能可能会提高,至少在用户看来是这样


结论 想象一下,打开Instagram,加载第一组照片(你能看到的照片),加载速度比以前快一倍。照片可能是你的首要任务。如果您的用户名、通知指示器和配置文件图片需要额外几秒钟才能填充,这无关紧要,因为您已经收到了预期的数据,并且已经开始以用户身份消费。相比之下,先加载结构数据。没有人关心看到他们的用户名或公司徽标加载。他们希望看到内容

我不知道这是一个糟糕的想法还是已经考虑过了,但我很想得到一些反馈

你觉得怎么样


从技术角度看,这可能吗?

在应用程序代码中实现这一点显然是一个荒谬的建议。
我认为恰恰相反,对不起。如果您想快速加载一些东西,而其他东西可能会慢一些,那么就由您设计一个应用程序来实现这一点。我认为你能要求的最好的应用程序是能够为你做一些这样的设计。SSRS是一个产品示例,它基本上实现了您所描述的关于深入报告和数据检索的功能。报表设计器(在某种程度上)禁止交错数据检索。此外,Instagram之类的产品实际上并不像您所描述的那样工作。为了打开Instagram,您必须已经输入(或存储)您的用户名和密码。无法检索此信息--应用程序已经可以使用此信息。其他东西,如公司徽标,可以缓存和同步,这基本上是你描述的“骨架屏幕”的一部分。回复:Instagram。你是对的,我的意思是作为一个非常简单的例子。当然,需要
SELECT id, first_name, last_name FROM person;


SELECT * FROM person WHERE id = 1;