kolay erişim için veritabanı ve disk belleği ile uzun bir makale ve mağaza bölmek nasıl?

4 Cevap php

Uzun bir makale (100,000 kelime söylemek), ve ben tarafından, sayfa 1, 2, veya eşyanın sayfa 38 görüntülemek için bir PHP dosyası yazmak gerekiyor herhalde

display.php?page=38

ama her sayfa için kelimelerin sayısı (500 sayfa başına kelime, ama gelecek ay ise, biz kolayca sayfa başına 300 kelime değiştirebilirsiniz şu anda, örneğin) zamanla değişebilir. Uzun bir yazı bölmek ve veritabanına depolamak için iyi bir yolu nedir?

Biz 500 kelimeleri görüntülemek istiyorsunuz ama tüm paragrafları eklerseniz P.S. tasarımı daha karmaşık olabilir. Yani biz zaten kelime 480 gösteriyor ama paragraf kalan 100 daha fazla kelime varsa, o zaman 500 kelime sınırı aşıyor olsa bile yine o 100 kelimeleri göstermek vardır. (Ve daha sonra, bir sonraki sayfa tekrar bu 100 kelimeleri göstermek gerekir).

4 Cevap

Ben kaydederken chuks ilgili yazılar bölerek bunu yapardı. Kaydetmek script içine tasarım ve böyle bir tabloya her yığın tasarruf kurallar ne olursa olsun kullanarak makale bölmek:

CREATE TABLE article_chunks (
    article_id int not null,
    chunk_no int not null,
    body text
}

Sonra, bir makalenin bir sayfasını yüklediğinizde:

$sql = "select body from article_chunks where article_id = "
    .$article_id." and chunk_no=".$page;

Eğer sayfaları bölme makalelerin mantığını değiştirmek istediğinizde, bir komut dosyası şu birlikte tüm parçalarını çeker ve onları yeniden böler çalıştırın:

UPDPATE: tavsiyesi verilmesi onlar yazılır daha makaleleri daha sık okunur, yani, yazma-yoğun daha uygulama salt yoğun daha varsayalım

Bu kesmek belirleyen bir programı bırakmak için iyi bir fikir değil, çünkü elle metni kesmek için daha iyi bir yolu var. Bazen sadece h2 etiketine sonra kesilir ve bir sonraki sayfadaki metin ile devam edilecektir.

This is simple database structure for that:
article(id, title, time, ...)
article_body(id, article_id, page, body, ...)

SQL sorgusu:

SELECT a.*, ab.body, ab.page
FROM article a
INNER JOIN article_body ab
    ON ab.article_id = a.id
WHERE a.id = $aricle_id AND ab.page= $page
LIMIT 1;

Uygulamada başka bir sayfa için yeni bir textarea eklemek için basit jQuery kullanabilirsiniz ...

Sizin tablo gibi bir şey olabilir

CREATE TABLE ArticleText (
  INTEGER artId,
  INTEGER wordNum,
  INTEGER wordId,
  PRIMARY KEY (artId, wordNum),
  FOREIGN KEY (artId) REFERENCES Articles,
  FOREIGN KEY (wordId) REFERENCES Words
)

Tabii bu çok uzay-pahalı vs, veya yavaş olabilir, ama (çok DB motoru bağlıdır gibi) olduğunu belirlemek için bazı ölçümler gerekir. BTW, ben Makaleler tablo artid anahtarlı makaleleri meta ile basit bir tablo olduğu açıktır umut ve Sözcükler tablo (zaten bilinen kelime belirleyerek orada bazı yer kazanmak için çalışırken wordId anahtarlı her makalede tüm kelimelerin bir tablo Bir makale girildiğinde, bu mümkün değilse ...). Bir özel bir kelime gibi ve her gerçek kelime farklı olarak kolayca tanımlanabilir işaretleyici "paragraf sonu" olmalıdır.

Bu gibi verileri yapılandırma yaparsanız sayfa tarafından alınırken çok esneklik kazanmak ve isterseniz sayfa uzunluğu sorgusu tarafından, bir çırpıda bile sorgu değiştirilebilir. Bir sayfayı almak için:

SELECT wordText
FROM  Articles
 JOIN ArticleText USING (artID)
 JOIN Words USING (wordID)
 WHERE wordNum BETWEEN (@pagenum-1)*@pagelength AND @pagenum * @pagelength + @extras
  AND Articles.artID = @articleid

parametreler @pagenum, @pagelength, @extras, @articleid sorgu sırasında hazırlanan sorguda eklenecek olan (kullanım olursa olsun dizimi DB ve Böyle :extras veya numaralı parametrelerin ya da her neyse) gibi dil gibi.

Bu yüzden ötesinde sözler @extras olsun beklenen sonu-sayfa-ve daha sonra istemci tarafında biz onlardan biri son paragraf işareti olduğundan emin olmak için bu ekstra kelimeleri kontrol - aksi takdirde biz (başka bir sorgu yapacağız ) BETWEEN değerleri farklı ile daha fazla almak için.

Uzakta ideal, ama, sen vurgulanan olduğunuz tüm konularda verilen, değer dikkate alınarak. Eğer sayfa uzunluğu her zaman örneğin olmanın güvenebilirsiniz eğer 100'ün katları, 100 kelimelik parçalara göre bu çok hafif bir değişim (ve hiçbir Words tablo, satır başına doğrudan saklanır sadece metin) kabul edebilir.

Yazar parçalar kendilerini içine yazı bölelim.

Yazarlar bir algoritma olması, imho, kötü bir karar yok "Part 1-Montaj", "Bölüm 2-Configuration" vb gibi, mantıksal parçaya bölerek bir makale ilginç ve okunabilir hale getirmek için biliyorum.

Yanlış yerde bir makale doğrama sadece okuyucu rahatsız yapar. Bunu yapmayın.

benim 2 ¢

/0