Re: Fast prefix search?
| From: | js | Date: | Sun, 14 Oct 2007 02:32:50 +0000 |
| Subject: | Re: Fast prefix search? | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-263192@lists.php.net to get a copy of this message | ||
On 10/14/07, Nathan Nobbe <quickshiftin@gmail.com> wrote:
> how big is your dataset; have you tested against a potential data set and
> gotten
> long execution times?
The dataset consists of about several million lines
and I've tested script like above against the dataset.
it took almost a hour.
(perl script that uses set_range finished the job within 2 minutes)
> notice how i used strpos rather than strstr, because i got this tip from the
> docs
> Note: If you only want to determine if a particular needle occurs within
> haystack,
> use the faster and less memory intensive function strpos() instead.
On 10/14/07, Robert Cummings <robert@interjinn.com> wrote:
> So don't use strstr() use strpos(). Specifically use it like follows:
>
> if( strpos( $haystack, $prefix ) === 0 )
> {
> // it's a prefix.
> }
>
Great tip. Thank you!
> there are some optimization points as well. if you use a for loop, i think
> it
> will run a hair faster than the foreach, just make sure to store the length
> of the
> dictionary in an variable and use that as the sentinel control variable.
> also, if
> your search can be case insensitive you can use stripos instead of strpos,
> that will
> probly get you a little speed bump as well.
I'll try.
> if the string methods in a loop are too doggy due to the size of your
> datasets,
> you might write a program that uses berkdb and call it using the shell from
> within php.
that seems a shellscript...
Threre seems no easy solution for this job.
The best bet could be to write up do-it-your-self B-tree
implementation in PHP...
Anyway, thank you. your advice extended my knowledge a little :)