abonnement Unibet Coolblue
pi_128531706
Dat doe ik dus nu, plus ik voeg 500 bytes extra toe om niets te missen... :D
Just say hi!
  Moderator / Redactie Sport / Devops woensdag 3 juli 2013 @ 11:50:21 #77
176766 crew  zoem
zoemt
pi_128532007
quote:
5s.gif Op woensdag 3 juli 2013 10:33 schreef Chandler het volgende:
:{ raar, kan iemand mij uitleggen waarom dit zo langzaam gaat? :@
Ja en nee. Dat hangt compleet van de gebruikte regex af. Een inefficiente regex kan (onnodig) lang duren, zeker als het om veel karakters gaat (oa ivm backtracking). Wat voor regex pattern gebruik je?
pi_128532386
"/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i"

Om emails te parsen! :) ik krijg links met documenten aangeleverd die ik moet omzetten naar een database tabel...
Just say hi!
  Moderator / Redactie Sport / Devops woensdag 3 juli 2013 @ 12:15:46 #79
176766 crew  zoem
zoemt
pi_128532931
Aha, de bekende email-regex :P

Ik zie een aantal nested quantifiers, wellicht is dit interessant leesvoer: Catastrophic backtracking.

Ik heb nu helaas niet de tijd om deze regex te optimaliseren, maar misschien wel een tip: probeer niet alles in een regex te vrotten. Je kunt ook ruwweg alle strings lijkende op emailadressen eruit halen en daarna de $matches array loopen voor een nadere validatiestap. Dus trek de filterstap en validatiestap wat uit elkaar.
  woensdag 3 juli 2013 @ 13:02:19 #80
187069 slacker_nl
Sicko pur sang
pi_128534603
quote:
0s.gif Op woensdag 3 juli 2013 12:00 schreef Chandler het volgende:
"/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i"

Om emails te parsen! :) ik krijg links met documenten aangeleverd die ik moet omzetten naar een database tabel...
Alles achter de @ kan je hiertegen aangooien:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{                                                                                                                                                                         
    # The following is stolen from:
    # http://cpansearch.perl.org/src/CREIN/Regexp-Common-dns-0.00_01/lib/Regexp/Common/dns.pm
    # So we don't need to install the dependency which is not in the Debian repository
    #    
    sub _domain {
        my %flags = @_;

        my $sep = '\.';

        my $letter      = '[a-zA-Z]';
        my $let_dig     = '[a-zA-Z0-9]';
        my $let_dig_hyp = '[-a-zA-Z0-9]';

        my %labels = (
            1035   => "(?:$letter(?:$let_dig|$let_dig_hyp\{1,61}$let_dig)?)",
            1123   => "(?:(?:$let_dig|$let_dig$let_dig_hyp*$let_dig)$sep)*(?:$let_dig|$let_dig$let_dig_hyp*$let_dig)",
            2181   => '[^.]{1,63}',
            hybrid => '[a-zA-Z0-9_-]{1,63}'
        );   

        $flags{'-rfc'} ||= 1035;

        my $label = $labels{$flags{'-rfc'}} || die("Unknown DNS RFC: $flags{'-rfc'}");

        if ($flags{'-rfc'} ne 2181 && exists $flags{'-wildcard'} && not defined $flags{'-wildcard'}) {
            $label = "(?:\\*|$label)";
        }    

        my $quant = '*'; 
        if ($flags{'-minlabels'}) {
            $quant = '{' . ($flags{'-minlabels'} - 1) . ',}';
        }    

        return qr/^(?:$label$sep)$quant$label$sep?$/;
    }    

    my $fqdn_regexp = _domain(-rfc => 1123, -minlabels => 2);

    use constant VALID_FQDN => sub {
        my $fqdn = shift;
        if ($fqdn && $fqdn =~ m/$fqdn_regexp/) {
            $fqdn =~ s/\.$//;
            return 0 if (length($fqdn) > 255);
            return 0 if (grep { length($_) > 63 } split(/\./, $fqdn));
            return 1;
        }    
        return 0;
    };   
}

Je mag het zelf verphp'en. Dan kan je vervolgens alles voor de @ ook nog eens goed parsen en dan ben je klaar.
In theory there is no difference between theory and practice. In practice there is.
  Moderator / Redactie Sport / Devops woensdag 3 juli 2013 @ 13:54:15 #81
176766 crew  zoem
zoemt
pi_128536936
En voor je het weet heb je zoiets: http://www.perlmonks.org/?node_id=393809 :X

Ik zou het lekker simpel houden. Als het even kan zou ik filter_var() (php >= 5.2.0) erbij betrekken voor de validatie.
pi_128540548
quote:
12s.gif Op woensdag 3 juli 2013 13:54 schreef zoem het volgende:
En voor je het weet heb je zoiets: http://www.perlmonks.org/?node_id=393809 :X

Ik zou het lekker simpel houden. Als het even kan zou ik filter_var() (php >= 5.2.0) erbij betrekken voor de validatie.
:D

filter_var gebruikt trouwens intern ook een enorme regex :P
..///
  maandag 8 juli 2013 @ 09:23:31 #83
25889 Sitethief
Fulltime Flapdrol
pi_128711732
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    
public function compareValues($type,$compare1,$compare2){
        
$count1 =0;
        
$count2 =0;
        switch (
$type) {
            case 
'Doctype':
                
$var '\$v->data->doctype';
                break;

            default:
                break;
        }
        foreach(
$this->selectedData as $k=>$v){
            
$val 'empty';
            eval(
'$val = '.$var.';');
            if(
$val && $val === $compare1)++$count1;
            if(
$val && $val === $compare2)++$count2;
        }
        return 
$count1.$count2;
    }
?>

Ik wil deze functie gebruiken om dynamisch bepaalde waardes in een array met objecten te vergelijken. Het probleem is dat ik meerdere type data wil kunnen vergelijken die op meerdere plekken in het object zitten. Weet iemand of het mogelijk is om, met bijvoorbeeld eval, deze op een makkelijke manier dynamisch aan te maken? Anders moet ik die foreach in iedere case stoppen en dat vind ik toch niet een goede, beheersbare oplossing. Maar eval zelf is ook niet zo heel erg tof.

Wat ik tot nu toe kon vinden is dit alleen maar mogelijk bij statisch properties.
Stroek: Sitethief, die is heel groot en sterk :Y.
Faat: *zucht* zoals gewoonlijk hoor Sitethief weer in de bocht &gt;:)
pi_128855608
Ik heb een query die raar doet wanneer ik gebruik wil maken van ORDER BY.

Zonder order by is deze query 0.0043 seconden, met ORDER BY `failed` kost deze query ruim 23 seconden!?

1
2
3
4
5
6
7
SELECT  `spider`.`id` AS spiderID,  
`spider`.`url` AS spiderURL,  
`spider`.`failed` AS spiderFailed
FROM  `spider` 
WHERE  `spider`.`project_id` =7
AND  `spider`.`processed` =0
LIMIT 1

Als ik een URL laad wil ik het liefst URLS laden die ik nog niet heb gehad (processed = 0) maar liefst ook de URLS die nog niet gelezen en mislukt zijn. Met huidige query lees ik deze 3x achter elkaar alvorens processed op 1 te zetten, alleen nu wilde ik met ORDER BY 'failed' ASC de URLS met een waarde die groter is dan 0 achter aan zetten en de URLS met waarde van 0 natuurlijk vooraan... oftewel eerst uitlezen.

Tabel
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `spider` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `project_id` bigint(20) unsigned NOT NULL,
  `url` varchar(255) NOT NULL,
  `processed` tinyint(1) NOT NULL DEFAULT '0',
  `failed` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `project_id_2` (`project_id`,`url`),
  KEY `failed` (`failed`),
  KEY `project_id` (`project_id`,`processed`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=103771614 ;

Iemand een idee? oh ik heb maar 17m regeltjes....
Just say hi!
  Moderator / Redactie Sport / Devops donderdag 11 juli 2013 @ 23:46:09 #85
176766 crew  zoem
zoemt
pi_128855743
Wat zegt EXPLAIN?
  donderdag 11 juli 2013 @ 23:49:58 #86
330295 Purplesparks
Lovercall baby
pi_128855903
quote:
0s.gif Op donderdag 11 juli 2013 23:42 schreef Chandler het volgende:
Ik heb een query die raar doet wanneer ik gebruik wil maken van ORDER BY.

Zonder order by is deze query 0.0043 seconden, met ORDER BY `failed` kost deze query ruim 23 seconden!?
[ code verwijderd ]

Als ik een URL laad wil ik het liefst URLS laden die ik nog niet heb gehad (processed = 0) maar liefst ook de URLS die nog niet gelezen en mislukt zijn. Met huidige query lees ik deze 3x achter elkaar alvorens processed op 1 te zetten, alleen nu wilde ik met ORDER BY 'failed' ASC de URLS met een waarde die groter is dan 0 achter aan zetten en de URLS met waarde van 0 natuurlijk vooraan... oftewel eerst uitlezen.

Tabel
[ code verwijderd ]

Iemand een idee? oh ik heb maar 17m regeltjes....
Natuurlijk niet het antwoord wat je zoekt. Maar je kan het via een omweg ook gewoon orderen binnen php lijkt me.
Touching from a distance ~
  donderdag 11 juli 2013 @ 23:51:32 #87
178193 Juicyhil
Bekende FOK!ker
pi_128855961
quote:
0s.gif Op donderdag 11 juli 2013 23:49 schreef Purplesparks het volgende:

[..]

Natuurlijk niet het antwoord wat je zoekt. Maar je kan het via een omweg ook gewoon orderen binnen php lijkt me.
Dat gaat je geheugen kosten _O-
Op dinsdag 9 augustus 2011 23:01 schreef SuperrrTuxxx het volgende:
Ik hou zoveel van jou, ik doe alles voor je! O+
  donderdag 11 juli 2013 @ 23:52:46 #88
330295 Purplesparks
Lovercall baby
pi_128856016
quote:
0s.gif Op donderdag 11 juli 2013 23:51 schreef Juicyhil het volgende:

[..]

Dat gaat je geheugen kosten _O-
True dat, maar een potentiële mogelijkheid als chandler niet de oplossing weet te vinden van de lange order tijd.
Touching from a distance ~
  donderdag 11 juli 2013 @ 23:54:51 #89
178193 Juicyhil
Bekende FOK!ker
pi_128856114
quote:
0s.gif Op donderdag 11 juli 2013 23:42 schreef Chandler het volgende:
Ik heb een query die raar doet wanneer ik gebruik wil maken van ORDER BY.

Zonder order by is deze query 0.0043 seconden, met ORDER BY `failed` kost deze query ruim 23 seconden!?
[ code verwijderd ]

Als ik een URL laad wil ik het liefst URLS laden die ik nog niet heb gehad (processed = 0) maar liefst ook de URLS die nog niet gelezen en mislukt zijn. Met huidige query lees ik deze 3x achter elkaar alvorens processed op 1 te zetten, alleen nu wilde ik met ORDER BY 'failed' ASC de URLS met een waarde die groter is dan 0 achter aan zetten en de URLS met waarde van 0 natuurlijk vooraan... oftewel eerst uitlezen.

Tabel
[ code verwijderd ]

Iemand een idee? oh ik heb maar 17m regeltjes....
Neem anders eens failed op in je where-clause. Dan hoeft hij in wat minder rijen te sorteren.
Edit: oh never mind, niet goed gelezen :P
Op dinsdag 9 augustus 2011 23:01 schreef SuperrrTuxxx het volgende:
Ik hou zoveel van jou, ik doe alles voor je! O+
  Moderator / Redactie Sport / Devops vrijdag 12 juli 2013 @ 00:02:55 #90
176766 crew  zoem
zoemt
pi_128856450
quote:
0s.gif Op donderdag 11 juli 2013 23:51 schreef Juicyhil het volgende:

[..]

Dat gaat je geheugen kosten _O-
Valt erg mee hoor als je het een beetje slim aanpakt, aangenomen dat er gewerkt wordt met een beperkte subset van de 17M rows (processed=0). Maar goed, de query optimaliseren heeft natuurlijk de voorkeur.

[ Bericht 0% gewijzigd door zoem op 12-07-2013 00:48:54 ]
pi_128865101
Ja, en het rare is dat er geen filesort gebruikt wordt, dus het orderen gebeurd toch echt wel in het geheugen (als ik check met explain). Dacht zelf ook dat ik de indexes goed had en dat blijkt wel, maar het vervelende blijft dat ik per query met order by een kleine 1000x zolang bezig ben...

Maar hebben jullie tips? oh en de beperkte set van 17m rows zijn in dit geval zo'n 0,5m rows :@

@zoom:

Zonder order by
1 SIMPLE spider ref project_id_2,project_id project_id 9 const,const 536370

Met order by
1 SIMPLE spider index project_id_2,project_id failed 1 NULL 39 Using where

[ Bericht 9% gewijzigd door Chandler op 12-07-2013 11:41:09 ]
Just say hi!
  vrijdag 12 juli 2013 @ 11:38:38 #92
330295 Purplesparks
Lovercall baby
pi_128865218
quote:
0s.gif Op vrijdag 12 juli 2013 11:35 schreef Chandler het volgende:
Ja, en het rare is dat er geen filesort gebruikt wordt, dus het orderen gebeurd toch echt wel in het geheugen (als ik check met explain). Dacht zelf ook dat ik de indexes goed had en dat blijkt wel, maar het vervelende blijft dat ik per query met order by een kleine 1000x zolang bezig ben...

Maar hebben jullie tips? oh en de beperkte set van 17m rows zijn in dit geval zo'n 3,5m rows :@
Gaat het ook zo traag wanneer je order by gebruikt in andere tabellen of alleen in deze?
Touching from a distance ~
pi_128865305
quote:
0s.gif Op vrijdag 12 juli 2013 11:38 schreef Purplesparks het volgende:

[..]

Gaat het ook zo traag wanneer je order by gebruikt in andere tabellen of alleen in deze?
Geen idee, rest van de tabellen zijn niet zo groot dus daar zal het allemaal wel meevallen... en daar zit het tijdsverlies in deze niet in....
Just say hi!
  vrijdag 12 juli 2013 @ 11:43:34 #94
330295 Purplesparks
Lovercall baby
pi_128865399
quote:
15s.gif Op vrijdag 12 juli 2013 11:40 schreef Chandler het volgende:

[..]

Geen idee, rest van de tabellen zijn niet zo groot dus daar zal het allemaal wel meevallen... en daar zit het tijdsverlies in deze niet in....
Okee, wilde alleen uitsluiten dat het om de 1 of andere vage reden niet aan je sql prog zelf lag.

Test je het trouwens lokaal allemaal?

[ Bericht 3% gewijzigd door Purplesparks op 12-07-2013 11:49:14 ]
Touching from a distance ~
  vrijdag 12 juli 2013 @ 13:04:15 #95
187069 slacker_nl
Sicko pur sang
pi_128867993
Hoe test je het eigenlijk, ben je de query via php aan het doen of die je het in een sql prompt?
In theory there is no difference between theory and practice. In practice there is.
pi_128868219
Zowel lokaal als online test ik dit, aangezien mijn lokale test omgeving maar uit zo'n 5m regels bestaat... maar goed, het is een laptop en de online server heeft nogal wat meer power en daar is het zelfs sloom :+

Query test ik via phpmyadmin, domweg omdat het gemakkelijk is! ;)
Just say hi!
  vrijdag 12 juli 2013 @ 13:55:34 #97
330295 Purplesparks
Lovercall baby
pi_128869760
quote:
14s.gif Op vrijdag 12 juli 2013 13:11 schreef Chandler het volgende:
Zowel lokaal als online test ik dit, aangezien mijn lokale test omgeving maar uit zo'n 5m regels bestaat... maar goed, het is een laptop en de online server heeft nogal wat meer power en daar is het zelfs sloom :+

Query test ik via phpmyadmin, domweg omdat het gemakkelijk is! ;)
Mijn stiefpa had een programma voor een bedrijf ontwikkeld, bij externe resultaten van bepaalde queries opvragen duurde het soms ook wel tot een minuut lang. Terwijl als hij het daar ter plekke testte een seconde of nog minder. Weet niet exact waar het aanlag maar hij heeft het opgelost. Hij maakte trouwens gebruik van delphi pascal in combinatie met een sql variant.
Touching from a distance ~
  Moderator / Redactie Sport / Devops vrijdag 12 juli 2013 @ 14:00:51 #98
176766 crew  zoem
zoemt
pi_128869951
quote:
0s.gif Op vrijdag 12 juli 2013 11:35 schreef Chandler het volgende:
Ja, en het rare is dat er geen filesort gebruikt wordt, dus het orderen gebeurd toch echt wel in het geheugen (als ik check met explain). Dacht zelf ook dat ik de indexes goed had en dat blijkt wel, maar het vervelende blijft dat ik per query met order by een kleine 1000x zolang bezig ben...

Maar hebben jullie tips? oh en de beperkte set van 17m rows zijn in dit geval zo'n 0,5m rows :@

@zoom:

Zonder order by
1 SIMPLE spider ref project_id_2,project_id project_id 9 const,const 536370

Met order by
1 SIMPLE spider index project_id_2,project_id failed 1 NULL 39 Using where
En wat doet een index op je WHERE clause én ORDER BY field(s)?

MySQL Performance Blog: ORDER BY … LIMIT Performance Optimization
MySQL Reference Manual: ORDER BY Optimization
pi_128907578
Ik heb het doorgelezen en ga het nog eens doorlezen want ben niet echt heel veel wijzer geworden dan dat ik al was :+ maar goed, in mijn geval zal ik het ws 3x moeten lezen :X
Just say hi!
  maandag 15 juli 2013 @ 11:29:04 #100
187069 slacker_nl
Sicko pur sang
pi_128965264
In theory there is no difference between theory and practice. In practice there is.
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')