MYSQL + php, yeni tabloya otomatik olarak eklemek?

6 Cevap php

Ben 5 tablo, yani data1, DATA2 DATA3, VERİ4 ve data5 tabloları yaratacak. Her tablo sadece 1000 veri kayıtlarını saklayabilirsiniz.

Yeni bir giriş ya da ben yeni bir veri eklemek istediğiniz zaman, ben bir kontrol yapmak gerekir,

$ Veri1 = mysql_query (veri1 SELECT * FROM);

<?php 
  if(mysql_num_rows($data1) > 1000){
    $data2 = mysql_query(SELECT * FROM data2);
    if(mysql_num_rows($data2 > 1000){
      and so on...
    }
  }

Bu doğru bir yol olmadığını düşünüyorum? Ben kullanıcı 4500 isem, tüm denetimi yapmak için biraz zaman alacağını, demek. Bu sorunu çözmek için daha iyi bir yolu var mı?

6 Cevap

Ben cenneti numaralarını verdi, 5000 veya 10000 veri olabilir. Nedeni, esneklik ve taşınabilirlik? Eh, benim sql gurusu biri bana bu şekilde yapmak için öneririm

Guru Partitioning gibi bir şey hakkında konuşurken sürece, ben ciddiye onun tavsiye şüphe ederim. Veritabanı 1000'den fazla, 5000 veya 10000 satır işleyemez, başka bir veritabanı için arayın. Eğer bir kayıt limiti size yardımcı olacaktır nasıl gerçekten çok özel bir örnek yoksa, muhtemelen olmayacak. Yükü miktarı ile bunun muhtemelen sadece hiçbir kazanç için bir şeyler zorlaştırmaktadır ekler.

Bir düzgün kurmak veritabanı tablo kolayca kayıtları milyonlarca işleyebilir. Ayrı tablolar bölmeyi büyük olasılıkla esnekliği ne taşınabilirliğini de artacaktır. Eğer, performans sorunları çalıştırmak iyi yapılan bir iş için kendinizi tebrik edin ve daha sonra bu konuda endişe yeterli kayıtları birikir eğer.

Üzerinde okumak nasıl count rows in mysql.

Eğer InnoDB tabloları sayısı (*) işlemleri yaptığını, ne kullanıyorsanız veritabanı motoru bağlı olarak oldukça pahalı olduğunu, ve bu sayımları tetikleyiciler tarafından gerçekleştirilen ve bir komşu bilgileri tablosunda takip edilmelidir.

Eğer tarif yapısı genellikle ilk bir eşleme masa etrafında tasarlanmıştır. Bir birincil anahtar ile ilişkili hedef tablo bulmak için eşleştirme tablosunu sorgular.

Sen istekleri arasında mevcut tablonun takip etmek için bir "izleme" tablosu tutabilirsiniz.

Ayrıca race conditions için tetikte olması (kullanım işlemler, ya da tek bir işlem bir anda çalıştıran sigortalamak.)

Kullanıcının Ayrıca eğer değil $data1 = mysql_query(SELECT * FROM data1); iç içe olan, gibi bir şey yapacağız:

$i = 1;
do {
  $rowCount = mysql_fetch_field(mysql_query("SELECT count(*) FROM data$i"));
  $i++;
} while ($rowCount >= 1000);

MySQL (Ben teklif üzereyim ne daha iyi, ya da en azından) otomatik olarak bu yönetmek için bazı fantezi-pantolon yol yoksa ben şaşıracaksınız, ama burada bunu yapmak için tek yoldur.

1. Insert record into 'data'
2. Check the length of 'data'
3. If >= 1000,
    - CREATE TABLE 'dataX' LIKE 'data';
      (X will be the number of tables you have + 1)
    - INSERT INTO 'dataX' SELECT * FROM 'data';
    - TRUNCATE 'data';

Bu, her zaman bu tablonun arşivlenen sürümleri 'veri' tabloya ekleme, ve 'veri1', 'veri2', 'data3', vb anlamına gelir.

Sen create a MERGE table Bu gibi yapabilirsiniz:

CREATE TABLE all_data ([col_definitions]) ENGINE=MERGE UNION=(data1,data2,data3,data4,data5);

Sonra SELECT COUNT(*) FROM all_data gibi bir sorgu ile toplam satırları saymak mümkün olacaktır.

Eğer yukarıdaki MySQL 5.1 veya kullanıyorsanız ediyorsanız, (neredeyse) otomatik bölümleme kullanarak veritabanı bu ele sağlayabilirsiniz:

Read this article veya the official documentation