Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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
Javascript 用于存储搜索速度优先的部分URL的数据结构_Javascript_Data Structures_Firefox Addon_Computer Science_Firefox Addon Sdk - Fatal编程技术网

Javascript 用于存储搜索速度优先的部分URL的数据结构

Javascript 用于存储搜索速度优先的部分URL的数据结构,javascript,data-structures,firefox-addon,computer-science,firefox-addon-sdk,Javascript,Data Structures,Firefox Addon,Computer Science,Firefox Addon Sdk,我们有一个包含部分URL(字符串)的大型数据库,例如: “example1.com” “example2.com/test.js” “/foo.js” 我们的软件侦听HTTP请求,并尝试在HTTP请求的完整url中查找数据库的一个部分url 因此,我们正在获取完整的URL(即:”),并尝试在其上匹配数据库的一个部分模式 如果我们只关心搜索速度,那么存储部分URL数据库的最佳数据结构是什么? 现在,我们要做的就是: 遍历部分url(字符串)的整个数据库,并使用(在javascript中)查

我们有一个包含部分URL(字符串)的大型数据库,例如:

  • “example1.com”

  • “example2.com/test.js”

  • “/foo.js”

我们的软件侦听HTTP请求,并尝试在HTTP请求的完整url中查找数据库的一个部分url

因此,我们正在获取完整的URL(即:”),并尝试在其上匹配数据库的一个部分模式

如果我们只关心搜索速度,那么存储部分URL数据库的最佳数据结构是什么?


现在,我们要做的就是:

  • 遍历部分url(字符串)的整个数据库,并使用(在javascript中)查看完整url是否包含每个部分字符串
更新:


该软件是在Firefox上用Javascript编写的Firefox的扩展。

您可以做以下几件事:

  • 不要在客户端处理URL。JavaScript会很慢,尤其是当您有很多URL时。您可以创建一个REST API并将URL作为查询参数传入以进行匹配,即
    domain.com/API/?URL=…
    。将繁重的工作和内存使用放在服务器端也会减少您的工作量ndwidth
  • 将URL引导到RAM中,而不是每次都从数据库中读取。在这种情况下,类似的方法可以很好地工作
  • 一旦进入ram,结构将工作得最好,因为您正在进行简单的匹配。无论您做什么,都要避免字符串比较

如果您遵循以下几条建议,您将获得显著的加速。希望这能有所帮助。

您可以做以下几件事:

  • 不要在客户端处理URL。JavaScript会很慢,尤其是当您有很多URL时。您可以创建一个REST API并将URL作为查询参数传入以进行匹配,即
    domain.com/API/?URL=…
    。将繁重的工作和内存使用放在服务器端也会减少您的工作量ndwidth
  • 将URL引导到RAM中,而不是每次都从数据库中读取。在这种情况下,类似的方法可以很好地工作
  • 一旦进入ram,结构将工作得最好,因为您正在进行简单的匹配。无论您做什么,都要避免字符串比较

如果您遵循这几条建议,您将获得显著的加速。希望这会有所帮助。

假设您的部分字符串仅为域名和/或页面名称,您可以尝试从URL的末尾开始生成所有可能的组合:

 http://www.example.com/blah.js?foo=bar
 blaj.js
 example.com/blah.js
 www.example.com/blah.js
然后散列所有组合,将它们存储在一个数组中,并尝试在另一个数组中查找其中的任何组合,该数组包含数据库中所有部分字符串的散列

注:

如果您想匹配url中的任何字符串,比如
example.com
中的
ample
,它在存储方面就变得不那么复杂了,因为url中的所有随机字符串都是

其中,
n
是url的长度,
k
是要查找的字符串的长度。根据url的最大合理长度是2000个字符。并且假设要匹配随机字符串,则
k
的值从1到2000不等,这将导致从url和生成大量哈希从1到2000年,每个
k
n大于k

或者更准确地说-不同的哈希值

假设您的部分字符串只是域名和/或页面名称,您可以尝试从URL的末尾开始生成所有可能的组合:

 http://www.example.com/blah.js?foo=bar
 blaj.js
 example.com/blah.js
 www.example.com/blah.js
然后散列所有组合,将它们存储在一个数组中,并尝试在另一个数组中查找其中的任何组合,该数组包含数据库中所有部分字符串的散列

注:

如果您想匹配url中的任何字符串,比如
example.com
中的
ample
,它在存储方面就变得不那么复杂了,因为url中的所有随机字符串都是

其中,
n
是url的长度,
k
是要查找的字符串的长度。根据url的最大合理长度是2000个字符。并且假设要匹配随机字符串,则
k
的值从1到2000不等,这将导致从url和生成大量哈希从1到2000年,每个
k
n大于k

或者更准确地说,不同的哈希值是固定的部分URL类型的数量(如示例中所示,它只是域和路径)?在这种情况下,我会使用散列数组,分别检查分析的URL的每个区块与相应的散列。为什么不记录每个区块的点击数并按此对搜索进行排序?数据库是否适合RAM?部分字符串是否仅为域名或页面名(example.com或foo.js或bar.html)?@raina77ow:是的,我们数据库中的部分URL的数量是sub-domain.domain,domain,sub-domain.domain/path,domain/path,path本身。部分URL的类型数量是固定的吗(如示例所示,仅为domain和path)?在这种情况下,我会使用散列数组,分别检查分析的URL的每个区块与相应的散列。为什么不记录每个区块的点击数并按此对搜索进行排序?数据库是否适合RAM?部分字符串是否仅为域名或页面名(example.com或foo.js或bar.html)?@raina77ow:是的,我们数据库中的部分URL的数量是sub-domain.domain,domain,sub-domain.domain/path,domain/path,path本身。该软件是一个浏览器扩展,因此每个HTTP请求都在客户端实时处理。因此,我们无法使用服务器端。关于哈希表,您会怎么做关于我们有足够的时间