Questions tagged «caching»

有关应用程序的缓存算法以及数据库引擎以及其他信息存储和表示应用程序的信息缓存的实现的问题。

3
缓存排序/属性可以更改的分页结果的最佳实践是什么?
缓存排序/属性可以更改的分页搜索结果的最佳实践是什么? 假设在我的应用程序中,有人想要查看最近的20个讨论线程(在10,000个线程中)。一个请求将通过发送到数据库,servlet以XML / JSON形式从讨论线程表中获取前20条记录。如果他们随后要查看下一个20,则转到结果的下一页,这会触发另一个请求以获取下一个批次(限制和偏移= 20,依此类推)。 为了减少服务器负载和客户端等待,我想缓存结果的前几页。但是,我有两个问题: 结果显示的表可以按多个属性(即,线程创建日期,线程作者,最后发布日期)排序。这意味着没有上下文(即我们排序的依据)之类的“前20个结果”这样的语句是没有意义的。然后,前端如何与后端通信已加载的内容?我的第一个想法是对每个结果使用ID,但是在随后的请求中将它们发送回服务器(并根据它们过滤结果)就像将所有内容盲目地发送回一样耗时。我怎样才能做到这一点? 如果先前返回的结果的属性(即最新日期)改变了怎么办?然后,我们需要一种检查每个结果的方法,以查看自页面调入以来是否已在服务器端对其进行了修改。我该怎么做?

5
我应该为该缓存策略使用哪种数据结构?
我正在使用.NET 4.0应用程序,该应用程序在返回双精度数的两个双精度数上执行相当昂贵的计算。对数千项中的每一项执行此计算。这些计算是在Task线程池线程上执行的。 一些初步测试表明,一次又一次地执行相同的计算,因此我想缓存n个结果。当缓存满了,我想抛出了最不经常最近使用的项目。(编辑:我意识到至少经常没有意义,因为当缓存已满并且我将结果替换为新计算的结果时,那个结果将是最不常用的,并在下次计算新结果时立即替换并添加到缓存中) 为了实现这一点,我正在考虑使用Dictionary<Input, double>(其中Input将存储两个输入double值的微型类)存储输入和缓存的结果。但是,我还需要跟踪上次使用结果的时间。为此,我认为我需要第二个存储信息的集合,以便在缓存已满时从字典中删除结果。我担心不断对清单进行排序会对性能产生负面影响。 有没有更好的方法(例如性能更高的方法),或者甚至是我不知道的通用数据结构?为了确定解决方案的最优性,我应该进行哪些类型的分析/测量?

4
为什么大多数网站上的邮件视图计数比较慢?
请注意,YouTube视频的观看次数总是很慢吗?例如,一个视频有1000条评论,但仍具有500次匹配,几小时后将具有10000次点击。 YouTube并不孤单。大多数留言板都是以这种方式实现的,并且视图计数每10分钟左右更新一次。 有谁知道背后的原因吗? 谢谢。
10 caching 

3
是否有CPU执行这种可能的L1缓存写优化?
当具有L1高速缓存的CPU进行写操作时,通常会发生这种情况(假定正在写入的高速缓存行已在L1高速缓存中),高速缓存(除了更新数据外)会将高速缓存行标记为脏,并在稍后将行与更新的数据一起写出。 一种可能的优化方法是使缓存将写入内容与缓存的先前内容进行比较,如果它们相同,则不要将行标记为脏。因为这可以使高速缓存有时避免回写,所以我可以看到CPU制造商如何看待这种逻辑所需要的门。 我的问题:是否有执行此优化的CPU? 关于我为什么要问的背景:我正在编写一些需要经常访问内存的代码;也就是说,能够侦听缓存行为的人不应该推断出我在做什么。我的某些访问是写操作,并且以明显的方式来实现此代码,许多写操作将写入已经存在的相同数据。我需要进行写操作,因为根据数据,我正在写的数据可能相同也可能不同,并且无论如何都要执行相同的操作很重要。如果CPU通过不实际写“ no-change-write”来进行优化,则意味着高速缓存的行为将根据我在做什么而变化,这将颠覆我的目标。 那么,是否有CPU尝试以这种方式优化写入?
9 caching  cpu 

1
为所有用户缓存经过身份验证的请求
我正在开发一个Web应用程序,该应用程序必须处理需要授权的并发用户的巨大冲动,以请求相同的内容。在当前状态下,它甚至完全破坏了32核AWS实例。 (请注意,我们使用Nginx作为反向代理) 无法简单地缓存响应,因为在最坏的情况下,我们必须通过解码JWT来检查用户是否已通过身份验证。这要求我们启动Laravel 4 ,即使启用了PHP-FPM和OpCache ,它也很慢。这主要是由于繁重的自举阶段。 可能会问一个问题:“如果您知道这将成为一个问题,为什么首先要使用PHP和Laravel?” -但是现在再来做这个决定为时已晚! 可能的解决方案 提出的一种解决方案是将Auth模块从Laravel提取到一个轻量级的外部模块(以类似于C的方式编写),其职责是解码JWT并确定用户是否通过身份验证。 请求的流程为: 检查缓存是否命中(如果没有正常传递给PHP) 解码令牌 检查是否有效 如果有效,则从缓存中投放 如果无效,请告诉Nginx,然后Nginx将把请求传递给PHP进行正常处理。 一旦我们向单个用户提供了此请求,这将使我们不再打PHP,而是接触到轻量级模块来解决解码JWT以及此类auth附带的其他注意事项。 我什至在考虑直接将此代码作为Nginx HTTP扩展模块编写。 顾虑 我担心的是,我从未见过这样的事情,并且想知道是否有更好的方法。 同样,第二次您将任何用户特定的内容添加到页面,它完全杀死了该方法。 Nginx中是否可以直接使用另一种更简单的解决方案?还是我们必须使用像Varnish这样的更专业的东西? 我的问题: 上述解决方案有意义吗? 通常如何处理? 有没有更好的方法来实现类似或更好的性能提升?

1
加速对两个数据仓库的数据访问的最佳方法?
我正在进行一个商业智能项目,该项目将要求抽象地访问两个现有数据仓库。我需要设计一个应用程序体系结构,以允许自助服务业务智能合并数据并提供两个现有仓库的单一视图。我想出了这样的东西: 我在虚拟化/缓存方面苦苦挣扎,想知道是否有任何企业设计模式可以解决我的问题。这样的体系结构是否可以抽象数据仓库中的星型模式?我正在研究诸如Red Hat JBoss数据虚拟化和Red Hat JBoss数据网格等产品。 我们目前不使用Hibernate,而我对数据网格的理解是它们是键值存储或对象存储,因此不适合缓存关系模型。我还应该提到,我们热衷于在自助服务仪表板部分使用供应商产品,但是如果供应商无法为我们提供所需的一切,我们最终可能会在此区域中进行一些自定义构建。

1
缓存行与内存页之间的关系
如果我是对的,则主存储器中的页面是在主存储器与外部存储设备(例如硬盘)之间传输数据的最小单位。主存储器的缓存行是在主存储器和cpu缓存之间传输数据的最小单位。 我想知道页面大小是否总是或最好是缓存行大小的自然数?如果缓存行大小为64字节,而内存页面大小为4KB,则每个页面中有4KB / 64字节== 64个缓存行。 页面和缓存行都是内存中的固定对象吗?还是它们只是某个大小的连续内存块,可以在内存中的任何位置启动和浮动? 高速缓存行是否总是不能跨越一个以上的页面,也就是说,高速缓存行的一部分在一个页面中,而另一部分在另一个页面中? 谢谢。
9 memory  caching 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.