`
南京老油条
  • 浏览: 57994 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一个时间换空间的例子

 
阅读更多

有这样一个应用:

一个向外推送帖子的网站,需要记录帖子都为哪些用户浏览过。怎么设计?

 

设计一(很粗糙的实现)

将帖子和用户做多对多关联,关联上了就是阅读过了。

那么问题来了,当用户数达到千万级别,帖子数达到万级,那将是很可怕的数量。

 

设计二(一位资深人士给的做法)

为每一个帖子开辟一个8M的存储空间,按照用户的id记录用户是否阅读过,以0表示false,1表示true。当然用户的id是从1开始自增长的。

 

我想说这两方法都太浪费存储资源了

关键是记录用户的最后访问时间,帖子的发布时间。

只要将用户的最后登陆时间和当前时间之间发布的帖子塞进用户的未读列表即可(可以在用户登陆的同时处理),用户每阅读一篇即可从未读列表中删除

 

如此,统计一篇帖子有哪些人未阅读过

最后登录时间早于帖子发布时间的 + 时间晚于帖子发布时间,且阅读列表中有这篇帖子的

 

统计一篇帖子有哪些人阅读过

时间晚于帖子发布时间,且阅读列表中没有这篇帖子的

 

这里的时间换空间就是消费计算机的运算时间换取存储的节约

1
1
分享到:
评论
2 楼 南京老油条 2015-08-30  
@
bassda 写道
我想不明白你是怎么省空间的
假设一天总共发500贴,我不可能全都看一遍,看个十几二十贴很正常吧,为什么你要去记录400多没看过的而不去记录那看过的几十贴?


这个看情况定,这个是针对阅读覆盖率高的设计的,即登录后80%以上的帖子会被浏览。
东西是死的,人是活的。
1 楼 bassda 2015-08-29  
我想不明白你是怎么省空间的
假设一天总共发500贴,我不可能全都看一遍,看个十几二十贴很正常吧,为什么你要去记录400多没看过的而不去记录那看过的几十贴?

相关推荐

    一个简单的线程例子

    例如,使用synchronized关键字修饰方法或代码块,可以确保同一时间只有一个线程能够执行特定代码。 此外,线程间的通信可以通过wait()、notify()和notifyAll()方法实现,这些方法需要在synchronized上下文中使用。...

    音效的一个例子

    "音效的一个例子"这个标题暗示了我们将会探讨一个关于音效设置的实际示例,它可以帮助我们深入理解如何调整和优化音效体验。下面我们将详细解析音效的几个关键元素:重低音、环绕音、均衡器和混响。 1. 重低音...

    c++时间与空间复杂度计算

    在判断是否为同一种时间复杂度时,文章提供了一个判断准则:如果两个复杂度函数之间可以通过乘以一个常数得到彼此,则认为它们是同一种复杂度;如果不能,则不是同一种复杂度。特别地,对于对数时间复杂度,如果n是...

    .net 获取系统时间例子 源码

    在这个例子中,我们创建了两个DateTime对象,一个代表起始日期,另一个代表当前时间。通过减法操作,我们可以得到两者之间的时间差,然后输出相差的天数。 .NET还提供了DateTimeOffset结构,它包含了日期、时间和与...

    java 算法实现只是一个简单的测试例子

    3. **效率**:虽然这不是一个性能关键的测试,但理解算法的时间复杂度和空间复杂度仍然是有益的。 总的来说,这个“java 算法实现只是一个简单的测试例子”旨在帮助初学者实践Java编程和算法设计,通过实际的代码...

    一个快速排序法的例子

    在描述中提到的“一个快速排序法的例子”是一个具体的应用场景,即生成1亿个随机数并使用快速排序算法对其进行排序,整个过程大约耗时26秒。这个时间可能因硬件性能、数据分布均匀性以及实现细节等因素而有所不同。...

    传递函数转状态空间的各种方法

    【描述】: 在控制系统分析与设计中,从传递函数转换到状态空间模型是一个重要的步骤。本文将深入探讨多种将传递函数转化为状态空间表达式的方法,帮助读者理解不同情况下的转换策略。 【部分内容分析】: 1. **直接...

    C# 调用服务器的时间,可以是远程同网内任意IP的系统时间,C#(winfrom)例子

    在这个示例中,我们创建了一个名为`SNTPClient`的类,该类有一个静态方法`GetServerTime`,它接收服务器IP,发送SNTP请求并返回服务器时间。在`MainForm`的构造函数中,我们调用这个方法并将结果显示在标签控件`...

    matlab开发-离散时间状态空间系统的确定性标识

    在Simulink基础中,离散时间状态空间系统的确定性标识是一个高级话题,它涉及到系统建模、数据分析和控制设计的综合运用。通过Simulink的Blocks,可以构建状态空间模型并将其集成到更大的系统仿真环境中。这使得用户...

    算法 时间复杂度 空间复杂度 经典

    在计算机科学领域,算法的时间复杂度与空间复杂度是衡量一个算法效率的重要指标。时间复杂度关注的是算法执行时间的增长速率,而空间复杂度则侧重于算法运行过程中所需内存空间的大小。 #### 二、时间复杂度 **...

    混沌时间序列的相空间重构的研究

    7. **Lorenz时间序列**:一个经典的混沌系统例子,常被用来验证相空间重构算法的有效性。 #### 详细解析 ##### 混沌时间序列与相空间重构的重要性 混沌时间序列来源于复杂非线性系统,这类系统在自然界和社会科学...

    操作系统经典例子

    在这个例子中,通过计算,我们可以发现存在一个安全序列,因此系统状态是安全的。然而,如果进程P1请求更多的资源而无法满足,这可能导致无法找到安全序列,从而产生死锁。 最后,磁盘空闲块的成组分配算法用于有效...

    双重指针排序的例子,排序只交换地址,而不交换数据!

    双重指针排序的基本思想是设置两个指针,一个从数组的开始位置(左指针)移动,另一个从结束位置(右指针)移动。在每一步,这两个指针会向中间靠拢,直到它们相遇。在此过程中,指针会检查并调整它们所指向的元素,...

    数据结构栈实现进制的转换

    在这个例子中,我们使用了一个顺序栈类SeqStack,来实现栈的基本操作。SeqStack类中定义了栈的最大容量、栈顶指针和栈元素数组。同时,该类还提供了压栈、出栈和取栈顶元素的方法。 在这个例子中,我们使用了一个...

    vega的经典一百个例子

    每一个文件名“vega经典百例”下的示例都可能是一个独立的知识点,涵盖了从简单的条形图到复杂的网络图和地理图的各类可视化设计。建议逐步学习,理解每个例子背后的逻辑和目的,这将极大地提升你的数据可视化技能。

    Android 各控件使用例子

    13. **ViewStub**:ViewStub是一个轻量级的组件,初始时不占用布局空间,只有在被设置可见或调用inflate方法时才加载其子视图。这在需要延迟加载或条件加载视图时非常有用。 通过学习和实践这些控件的使用,开发者...

    自己做的一个C#线程的例子

    本示例"自己做的一个C#线程的例子"将深入探讨如何在C#中创建和管理线程。 在C#中,我们主要使用`System.Threading`命名空间来操作线程。`Thread`类是这个命名空间的核心,它提供了创建、启动、暂停、恢复和终止线程...

    arcglobe飞行的一个例子

    标题中的“arcglobe飞行的一个例子”指的是使用ArcGlobe软件进行三维地球动画制作的示例。ArcGlobe是Esri公司开发的一款强大的地理信息系统(GIS)应用,它允许用户在三维环境中查看、分析和展示地理数据。在这个...

    vrml例子30

    1. **基础结构**:VRML文件是基于节点(Nodes)的,每个节点代表场景中的一个对象或行为。例如,Shape节点用于创建几何形状,Transform节点用于变换位置、旋转和缩放,而Light节点则用于设置光照效果。 2. **场景图...

Global site tag (gtag.js) - Google Analytics