并提前感谢您的帮助。
背景- 我正在编写一个 PHP 脚本,该脚本需要找出调用者试图到达的目的地。电话前缀是标识目的地的字符串。对于每次调用,程序必须找到与字符串匹配的最长前缀。例如,数字 30561234567 将与 305 匹配,但不会与 3057 或 304 匹配。如果存在 3056,它将是首选匹配。
在研究了几种数据结构之后,每个节点存储一个数字并包含指向其他 10 个可能选择的指针的树似乎是理想的。这可以实现为数组数组,脚本可以在其中检查 3,在那里找到一个数组,然后在该新数组上检查 0,找到另一个数组,依此类推,直到找到一个值而不是数组。该值将是目标 id(脚本的输出)。
要求- 性能是绝对关键的。检查这些前缀所花费的时间会延迟调用,并且每个服务器都必须处理大量调用,因此必须将数据结构存储在内存中。目前大约有 6000 个前缀。
问题- 每次服务器收到调用时都会运行脚本,因此数据必须保存在某种缓存服务器中。在检查了 memcached 和 APC(高级 PHP 缓存)之后,我决定使用 APC,因为它[更快][3](它是一个本地内存存储)
我遇到的问题是数组的数组可以变成多达 10 个数组深,并且将是一个非常复杂的数据结构,如果我将其作为对象添加到缓存中,则需要很长时间才能反序列化。
但是,如果我将每个数组分别添加到缓存中(使用一些逻辑命名结构可以轻松找到它,例如数组 3 的 3,数组 30 的 30,补丁后的数组的 305 等)我将不得不多次从缓存中获取不同的数组(每次调用最多 10 个),这使我经常访问缓存。
我会以正确的方式解决这个问题吗?也许还有另一种解决方案?还是我提出的一种方法优于另一种?
谢谢你的输入,
亚历克斯