Enormno podatkov, sesutje serverja
 
SlimDeluxe 25. mar 2013 19:53:45 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#21

  1. Samo zakaj pa rabiš vse naenkrat, ali ne moreš dobiti podatke z agregatnimi funkcijami (SUM, AVG...)? Verjetno ne prikazuješ vseh vrstic naenkrat? Tako da za posamezen izpis uporabiš LIMIT M,N.

  2. V CI naj bi uporabljal query binding:
    $query = $this->db->query('SELECT * FROM game WHERE user1Id = ? OR user2Id = ? OR user3Id = ?', array($id, $id, $id));

  3. Ko delaš z veliko podatki, predlagam, da ročno sprostiš result object:
    $results = $query->result();
    $query->free_result();
    return $results;


všeč(2) ni všeč(0) spam(0)
Freelance Web Developer
 
gentleman 26. mar 2013 01:00:16 Pridružen od:
21. sep 2009
331 objav
381 63 5
#22

@mitjast: Jap, sem dal po nekaj polj samo in je malce boljše.



@SlimDeluxe:

1. Hm. Zdaj, rabim kar dosti podatkov. Rabim vse njegove igre za obdobja. Recimo enega meseca, potem pol leta, eno leto, in pa vse podatke za vse njegove igre. Ker ne vem na katerem mestu v user1id, user2Id,.. je ne morem njegovih točk ven potegnat. Za potrebe statistike rabim še kolikokrat je vse igre igral, koliko točk je dosegel, potem datumsko kdaj je to igral.. Tako da več ali manj rabim vse ali se motim?




  1. Uf uf, binding uporabljam skos, zdaj sicer delam raw toliko da spravim v delujoče stanje.
    Tale free results je VELIKO rešil, zdaj vsaj podatke naloži, vendar še kar par sekund traja (5s).
    Takle je zdaj SQL:


$where = "user1Id = '".$id."' OR user2Id='".$id."' OR user3Id='".$id."' OR user4Id='".$id."'";
$query = $this->db->query("SELECT user1Points, user2Points, user3Points, user4Points, startedOn FROM tarok_game WHERE $where");
$results = $query->result();
$query->free_result();
return $results;

<3


všeč(0) ni všeč(0) spam(0)
 
pavarti 26. mar 2013 07:49:43 Pridružen od:
26. okt 2011
445 objav
587 92 14
#23

zaay123:

@mitjast: Jap, sem dal po nekaj polj samo in je malce boljše.



@SlimDeluxe:

1. Hm. Zdaj, rabim kar dosti podatkov. Rabim vse njegove igre za obdobja. Recimo enega meseca, potem pol leta, eno leto, in pa vse podatke za vse njegove igre. Ker ne vem na katerem mestu v user1id, user2Id,.. je ne morem njegovih točk ven potegnat. Za potrebe statistike rabim še kolikokrat je vse igre igral, koliko točk je dosegel, potem datumsko kdaj je to igral.. Tako da več ali manj rabim vse ali se motim?




  1. Uf uf, binding uporabljam skos, zdaj sicer delam raw toliko da spravim v delujoče stanje.
    Tale free results je VELIKO rešil, zdaj vsaj podatke naloži, vendar še kar par sekund traja (5s).
    Takle je zdaj SQL:


$where = "user1Id = '".$id."' OR user2Id='".$id."' OR user3Id='".$id."' OR user4Id='".$id."'";
$query = $this->db->query("SELECT user1Points, user2Points, user3Points, user4Points, startedOn FROM tarok_game WHERE $where");
$results = $query->result();
$query->free_result();
return $results;

<3




Za te opcije uporabljal ukaze v MYSQLu in ne PHP.



Npr: Group BY + COUNT, SUM, ...


všeč(0) ni všeč(0) spam(0)
 
gentleman 29. mar 2013 04:42:01 Pridružen od:
21. sep 2009
331 objav
381 63 5
#24

Hjoj spet težave. Zdaj bi rad teh 2,5 mio podatkov omejil na časovni čas glede na polje startedOn.. se pravi recimo podatke za en mesec. Spet memory limit, potem sem dal še na startedOn index pa spet.



Podatke dobivam takole:


$query = $this->db->select("startedOn");
$query = $this->db->where('startedOn BETWEEN "'. date('Y-m-d', strtotime($from)). '" and "'. date('Y-m-d', strtotime($to)).'"');

$query = $this->db->get("tarok_game");

$results = $query->result();
$query->free_result();
return $results;

Nevem več kaj naj naredim da bi tole hitreje delovalo oz. da se nebo sesuvalo.


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se