Database design 在数据库中存储Mandelbrot值的最佳方法是什么?

Database design 在数据库中存储Mandelbrot值的最佳方法是什么?,database-design,data-structures,hashtable,fractals,Database Design,Data Structures,Hashtable,Fractals,我目前正在尝试渲染Mandelbrot集,我很快意识到,不必重新计算每次渲染的最大迭代次数是很有用的……另一方面,需要跟踪的数据很多。在我看来(基于我对RDMSE的有限经验),关系数据库可能不是最好的选择,因为我不希望随着数据集变大而影响性能。对于哈希表来说,这似乎是一个完美的情况,但我以前从未使用过哈希表,似乎无法在现有的web服务器语言(Python/PHP/随便什么)中解决如何使用或管理哈希表的问题 更明确一点:要存储的重要值有: 复数平面上数的原始实部 复数平面上一个数的原始虚部 最大

我目前正在尝试渲染Mandelbrot集,我很快意识到,不必重新计算每次渲染的最大迭代次数是很有用的……另一方面,需要跟踪的数据很多。在我看来(基于我对RDMSE的有限经验),关系数据库可能不是最好的选择,因为我不希望随着数据集变大而影响性能。对于哈希表来说,这似乎是一个完美的情况,但我以前从未使用过哈希表,似乎无法在现有的web服务器语言(Python/PHP/随便什么)中解决如何使用或管理哈希表的问题

更明确一点:要存储的重要值有:

  • 复数平面上数的原始实部
  • 复数平面上一个数的原始虚部
  • 最大迭代次数
  • 在达到最大迭代次数之前或直到该点运行到无穷大之前,完成的迭代次数n
  • n次迭代后复平面上一个数的最终实部
  • n次迭代后复平面上一个数的最后虚部
在任何给定的时间,给定原始实部原始虚部,以及最大迭代次数,我希望能够得到最终实部和虚部的结果集

那你觉得呢?哈希表是一种方法吗?对于普通的数据结构来说,这个问题是否过于复杂

任何帮助都将不胜感激。提前谢谢

编辑

应朱丽叶·纳伯特的善意要求,我将对这个问题稍作阐述

我的目标是允许用户在没有计算延迟的情况下放大Mandelbrot集(即使是通过预定义的缩放)。我还希望能够在浏览器中做到这一点,该浏览器不断要求服务器提供新的数据数组,给出新的x和y坐标以及在复杂平面上查看的高度和宽度。然而,由于计算像素颜色值可以更快地完成(给定max_iter、real_final和imag_final),而且允许用户调整颜色设置也很好,因此我将只向浏览器发送我文章中列举的变量,并让用户的浏览器计算颜色

看看这个:

如果查看drawMandelbrot()函数,可以看到点循环将重要值存储在名为dataset的变量中。然后在drawMandelbrotFromData()函数中使用此变量,在该函数中,它执行计算每个像素的颜色所需的其余计算

如果单击“cleardabrot”,它将用白色矩形替换画布。如果单击“refilldabrot”,它将再次运行drawMandelbrotFromData()函数……这样做是为了向您展示,如果不必执行痛苦的迭代计算,它实际上可以以多快的速度渲染集

因此,这里的最终目标是能够以任意精度计算这些值,这样用户可以缩放到集合的任何级别,让服务器计算出这些精确点(或者最好是这些精确点附近的点)是否有任何数据,尽管我不确定在不执行某种范围查询的情况下如何做到这一点,然后逐像素地吐出信息。例如

  • 用户正在使用300x300画布
  • 他缩放到左上角为
    x=.000001
    y=.0000231
    的点
  • 他在这个框架中选择的宽度和高度是
    w=.00045
    h=.00045
他会将这些数字发送到服务器,然后依次接收一个300*300索引的数组(每个索引代表一个点),每个索引包含确定画布上每个像素颜色所需的信息。我的问题是…存储预先计算的Mandelbrot数据的最佳方式是什么,这样用户就可以输入任意的x、y、w和h值,并在该范围内快速提取复平面上点的值

在任何给定的时间,给定原始 真实的部分,最初的想象 零件,以及零件的最大数量 迭代,我希望能够 具有最终实数和实数的结果集 虚部

你的问题不清楚你为什么需要这个?为什么需要在同一点重新计算

如果您正在试验不同的max_迭代设置,您只需将每像素级别的实际_迭代保存在二进制文件、文本文件或图像或任何您认为方便加载/存储的文件中,例如关系数据库

如果您正在进行实时渲染,并且您正在使用一些需要重新计算递归方程的处理(在相同的原始点和相同的最大迭代次数),那么我可以想象您可以通过使用查找表来加快这一速度

显然,查找表必须比计算快。您需要一个查找表,对于该表,下面的操作总共花费的时间少于再次进行计算

  • 计算指数(给定origo_real、origo_imag、max_iter)
  • 加载缓存的计算(最终的、最终的、实际的)
  • 一个初始存储
根据在相同点重新计算/重新访问的方式,您可以将问题划分为索引很可能位于查找表中,并且查找表很小,足以存储在一级或二级缓存中

这些是一些想法。。但你应该澄清你真正的问题是什么

万一你需要很多