ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming[MySql] ถ้ามีข้อมูลเยอะๆ จะทำยังไงไม่ให้ query ช้าครับ
หน้า: 1 [2]  ทั้งหมด   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: [MySql] ถ้ามีข้อมูลเยอะๆ จะทำยังไงไม่ให้ query ช้าครับ  (อ่าน 9395 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
bonshington
ก๊วนเสียว
*

พลังน้ำใจ: 47
ออฟไลน์ ออฟไลน์

กระทู้: 376



ดูรายละเอียด
« ตอบ #20 เมื่อ: 23 มีนาคม 2011, 22:46:20 »

ถ้าหัวใจเต้นทีนึง insert 1 ที แบบนี้ ถือว่า ออกแบบผิดนะ มันทื่อเกินไป
ผมแนะนำใช้ cache ใน app จากนั้น insert ทีเดียวยาว แบบนี้ จำนวน transaction ขึ้นกับจำนวนคนไข้ ที่คาดว่า ปริมาณการ insert ต่อวันน่าจะลดลงหลายพันเท่าอยู่

เช่น

C#
โค๊ด:
public static class Cache
{
  private static List<KeyValuePair<string, DateTime>> cache = new ...

  public static void Add(string patientName){
    cache.Add(new KeyValuPair(patientName, DateTime.Now));
  }

  public static Action Flush(){
    cache.GroupBy(entry => entry.Key)
      .ToList()
      // ถ้า กลัว performance ไม่แรง ให้ใส่ .AsParallel().ForAll เปลี่ยน ForEach เป็น ForAll มันจะยิง insert โดยจำนวน connection = จำนวน thread ถ้ากลัวแรงเกิน ก็กำหนด max thread ให้มัน
      .ForEach(patient => DB.call_proc("heartbeat_inst", patient.Key, patient.Select(data => data.Value).ToArray()));
      
  }

  static Cache(){
    System.Threading.Tasks.Task.Factory.StartNew(() => {
      System.Threading.Thread.Sleep(5000); // 5 seconds
      Cache.Flush();
    });
  }
}

ถ้าเป็น postgre มันจะ insert array ได้
ปล ของ postgre function กับ store proc คืออันเดียวกัน
โค๊ด:
CREATE OR REPLACE FUNCTION heartbeat_inst(_name text, _beat timestamptz[])
  RETURNS setof hartbeat AS
$BODY$

begin

  return query
    insert into hartbeat(name, beat)
    select _name, unnest(_beat)
    returning *;

end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 100;
« แก้ไขครั้งสุดท้าย: 23 มีนาคม 2011, 23:12:53 โดย bonshington » บันทึกการเข้า
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #21 เมื่อ: 24 มีนาคม 2011, 19:59:56 »

ลองพิจารณา partitioning table
http://dev.mysql.com/doc/refma...5.1/en/partitioning-types.html

ทำ link ให้ http://www.thaiseoboard.com/index.php/topic,182928.0
« แก้ไขครั้งสุดท้าย: 27 มีนาคม 2011, 23:45:18 โดย ohmohm » บันทึกการเข้า
bmazahiro
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #22 เมื่อ: 24 มีนาคม 2011, 20:07:52 »

พวก NoSQL .. มั้งนะ  wanwan015
บันทึกการเข้า
หน้า: 1 [2]  ทั้งหมด   ขึ้นบน
พิมพ์