S J miniblogs

  • S J
    0

    Kā panākt, ka linki veidojas nevis /user?id=1, bet gan /user/1 ?
    Un vai ir prāta darbs komentāru skaitu attēlot ar SELECT * FROM `komenti` WHERE `read_id` = '$read->id' un tad izvelkot num_rows?

    • S J
      0

      Pirmo atradu, iekopēšu, gadijumā, ja kādu citu šis interesē.
      http://www.9lessons.info/2009/11/pretty-urls-with-htaccess-file.html

    • mad
      0

      Par otro - ja tu tos komentārus arī rādi no tā paša kverija, tad jā. Bet ja vajag tikai skaitu, tad tas ir ļoti neefektīvi, jo ielasa atmiņā visu komentāru saturu.

      Pareizāk būtu
      SELECT count(*) FROM `komenti` WHERE `read_id` = '$read->id'

      • mad
        0

        BTW, ja runa ir par relatīvi lieliem datu apjomiem, tad vēl efektīvāk būtu uztaisīt "counter cache", tas ir - glabāt komentāru skaita ailīti pie katra raksta un updatot kad tiek pievienots/dzēsts komentārs. Tad nevajag tramdīt komentāru tabulu rādot rakstu sarakstu, un pat atverot rakstu var iztikt bez kverija uz komentāru tabulu, ja jau ir zināms, ka komentāru nav. To gan tev šobrīd nevajag, bet nu tā, zināšanai biggrin_mini2.gif

        Piemēram exa miniblogos tā ir uztaisīts.

        • Viesty
          0

          Cik nanosekundes tas ietaupa?

          • mad
            0

            Nu pie 2 miljoniem ierakstu, viens tāds count() aizņem ap 0.001 sekundi jeb 1 000 000 nanosekundes.
            Uz katras lapas ielādi vajag kā minimums 7 tādus kverijus = 0.007

            Ņemot vērā, ka vidēji exā visa lapa ielādējas kādās 0.02 - 0.05 sekundēs, tas ir samērā daudz.

            Pie 100 000 ielādēm dienā (ar automātisko refresh jaunākajiem miniblogiem vispār ir vairāk):
            100000*0.007 - 700 sekundes jeb 11 minūtes, jeb 699 600 000 000 nanosekundes no mysql servera darbības katru dienu.

          • Viesty
            0

            Neizklausās nemaz tik slikti.
            Cik tad aizņemtu pārbraukt pāri 100 minibloga ierakstiem? 0.1 (izmanto taču to pašu count() gan izmantojot counter cache, gan arī neizmantojot?) (vai arī counter cache tikai nolasa ieraksta vērtību, ja tā, tad cik tas aizņem?) (es nezinu datubāzes) ?

          • mad
            0

            Izskatās, ka tik daudz nav.

            Izmantojot cache:
            SELECT * FROM `junk` LIMIT 100
            Showing rows 0 - 29 ( 100 total, Query took 0.0009 sec)


            Neizmantojot cache:
            SELECT `junk`.*, count(`miniblog`.`id`) as count_posts FROM `junk`, `miniblog` WHERE `miniblog`.`parent` = `junk`.`id` AND `miniblog`.`removed` = 0 AND `miniblog`.`type` = 'junk'
            GROUP BY `junk`.`id`
            LIMIT 100
            (Query took 0.0089 sec)

            Ja katru no 100 count kverijiem taisītu atsevišķi tad gan būtu krietni ilgāk.

          • Viesty
            0

            Nu vienalga tomēr atšķirība ir. 0.008 internetos nav nemaz tik maz biggrin_mini2.gif

        • S J
          0

          Vispār es jau kautko līdzīgu biju uztaisijis (Nu, ne zem rakstiem, bet lietotāju tabulā gan ierakstija.) biggrin_mini2.gif

    Atpakaļ Uz augšu