banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows MyISAM khác gì so với InnoDB  XML
  [Question]   MyISAM khác gì so với InnoDB 02/02/2007 01:24:34 (+0700) | #1 | 39444
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
Không biết 2 kiểu dữ liệu đó của MySQL, cái nào tốt hơn cho trường hợp nào, khác nhau về cái gì, thanks các anh nhiều :wink:
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 04/02/2007 02:00:18 (+0700) | #2 | 39818
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

114v wrote:
Không biết 2 kiểu dữ liệu đó của MySQL, cái nào tốt hơn cho trường hợp nào, khác nhau về cái gì, thanks các anh nhiều :wink:  


Theo kinh nghiệm bản thân thì tớ thấy rằng:

Đối với system nhỏ thì sự khác biệt về tính hiệu suất không thấy rõ. Điểm khác biệt nhất là dùng Inno không bị corrupted index trong khi dùng MyISAM mà db bị crash vì lý do gì đó thì dễ bị corrupted.

Nếu dùng db cho một ứng dụng đòi hỏi insert liên tục, Inno hơn MyISAM rất nhiều bởi 1 lý do hết sức quan trọng: MyISAM lock cả table trong khi thực hiện công tác cập nhật trong khi Inno chỉ lock ở row level. Nếu chạy một forum lớn và có nhiều member cập nhật bài vở hay có ứng dụng cập nhật số đếm (số lượng thành viên đang truy cập, số lần người xem bài....) thì MyISAM dẫn đến tình trang db bị nặng nề vì cả table thường xuyên bị lock. Đến một lúc nào đó thì db chết vì quá tải.

Đối với ứng dụng "đọc" nhiều hơn là "viết" thì 2 cái không có mấy khác biệt.

Thân mến.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 04/02/2007 09:54:06 (+0700) | #3 | 39891
nbthanh
HVA Friend

Joined: 21/12/2001 14:51:51
Messages: 429
Offline
[Profile] [PM]

conmale wrote:
Nếu dùng db cho một ứng dụng đòi hỏi insert liên tục, Inno hơn MyISAM rất nhiều bởi 1 lý do hết sức quan trọng: MyISAM lock cả table trong khi thực hiện công tác cập nhật trong khi Inno chỉ lock ở row level. Nếu chạy một forum lớn và có nhiều member cập nhật bài vở hay có ứng dụng cập nhật số đếm (số lượng thành viên đang truy cập, số lần người xem bài....) thì MyISAM dẫn đến tình trang db bị nặng nề vì cả table thường xuyên bị lock. Đến một lúc nào đó thì db chết vì quá tải. 

MyISAM nó không lock gì hết trọi (cái này mới kẹt chứ nó mà chịu lock thì còn đỡ) trừ khi client explicitly bắt server phải lock.

conmale wrote:
Đối với ứng dụng "đọc" nhiều hơn là "viết" thì 2 cái không có mấy khác biệt. 

Nếu dùng transaction thì "đọc" cũng phải bị ràng buộc bởi isolation level. Nên "đọc" thì InnoDB chậm hơn MyIASM khá nhiều.

Tóm lại thì về mặt tốc độ, MyIASM nhanh hơn nhiều so với InnoDB (cứ nhìn mấy cái benchmark trên site của MySQL thì thấy, về mặt "tốc độ" thì đám MySQL toàn lấy MyIASM ra so chứ đâu có dám lấy InnoDB ra smilie ).
Tuy nhiên, nếu server hỗ trợ InnoDB (nhiều shared hosting thường không enable InnoDB) thì cũng nên dùng cho dữ liệu được an toàn hơn.
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 04/02/2007 16:03:01 (+0700) | #4 | 39944
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
Cũng hơi căng, được cái này thì mất cái kia. Theo em thấy thì các forum tương đối lớn hiện nay vẫn thường hay dùng MyISAM. Có lẽ khắc phục cái tình trạng kia bằng cách dùng các câu lệnh query để chờ cho server free thì mới thực thi. Vậy cho em hỏi nếu dùng MyISAM thì khắc phục cái nhược điểm không an toàn dữ liệu bằng cách nào? Chắc là có cách smilie
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 04/02/2007 22:48:44 (+0700) | #5 | 39961
nbthanh
HVA Friend

Joined: 21/12/2001 14:51:51
Messages: 429
Offline
[Profile] [PM]
Thực ra cũng đâu có gì mà phải "khắc phục". Server thì lâu lắm mới crash 1 lần, mỗi lần crash mà có mất 1-2 bài viết trên forum thì cũng không có gì là ghê gớm cả.
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 04/02/2007 23:36:42 (+0700) | #6 | 39966
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

nbthanh wrote:

MyISAM nó không lock gì hết trọi (cái này mới kẹt chứ nó mà chịu lock thì còn đỡ) trừ khi client explicitly bắt server phải lock.
 

Nếu commit mà không lock mà cứ để commit tá lả thì bị tình trạng sai lạc lung tung. Dữ liệu bị kém chính xác hẳn. Bởi thế, phải lock trong khi commit. Nhưng lock mà dùng MyISAM thì nó lock cả table chớ không lock theo row. Điểm tai hại nằm ở chỗ nếu một commit nào đó chưa xong mà có hàng loạt commit khác queue up thì sẽ dẫn đến tình trạng chồng chất và độ chậm xãy ra còn thê thảm gấp mấy chục đến mấy trăm lần dùng Inno. Đó là chưa kể đến tình trạng database bị crash.

Nếu cứ dùng ngang xương mà không lock thì hết thì chẳng có gì phải bàn.

nbthanh wrote:

Nếu dùng transaction thì "đọc" cũng phải bị ràng buộc bởi isolation level. Nên "đọc" thì InnoDB chậm hơn MyIASM khá nhiều.
 

Nhưng cái chậm này tính ra theo trọn bộ transaction còn chấp nhận được. Nó chỉ là 1 khoảng thời gian cực nhỏ cho mỗi request.

nbthanh wrote:

Tóm lại thì về mặt tốc độ, MyIASM nhanh hơn nhiều so với InnoDB (cứ nhìn mấy cái benchmark trên site của MySQL thì thấy, về mặt "tốc độ" thì đám MySQL toàn lấy MyIASM ra so chứ đâu có dám lấy InnoDB ra smilie ).
Tuy nhiên, nếu server hỗ trợ InnoDB (nhiều shared hosting thường không enable InnoDB) thì cũng nên dùng cho dữ liệu được an toàn hơn. 

Mấy cái benchmark đó toàn nói chuyện extreme. Một forum, một site bình thường có bao nhiêu query / 1 sec để thấy được sự khác biệt giữa MyIASM và Inno?
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: MyISAM khác gì so với InnoDB 05/02/2007 11:26:07 (+0700) | #7 | 40056
[Avatar]
YHT
Member

[Minus]    0    [Plus]
Joined: 21/04/2006 13:29:33
Messages: 173
Location: HCM
Offline
[Profile] [PM] [WWW] [Yahoo!]
Có một điều em thấy khác biệt đó là InnoDB cho phép ta tạo foreign key constraint còn MyISAM thì không được. Đa phần các ứng dụng OSS đều không dùng constraint này mà tự giải quyết trong code, tuy nhiên nếu như có ý định dùng nó thì bắt buộc phải chọn InnoDB. Các shared hosting khác thì không biết thế nào chứ cái em đang dùng chỉ hổ trợ mỗi MyISAM, nếu muốn hổ trợ InnoDB thì phải thêm phí.
Về mặc hiệu suất có lẽ nhờ mấy nhóm test thực hiện rồi mình xem kết quả.
InnoDB vs MyISAM trên mạng bàn cũng nhiều, bạn vào google xem thử.
Đây là một link tham khảo http://dev.mysql.com/tech-resources/articles/storage-engine/part_3.html
--YHT
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 06/02/2007 13:49:40 (+0700) | #8 | 40260
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
Không biết các trang như Google, Yahoo, MSN dùng database nào smilie

Nếu ai biết xin giải đáp chỗ này:
- Trong MySQL, ví dụ web bị hack mà lúc đó dữ liệu khá nhiều, lại không được backup, có cách nào để không cho phép xóa dữ liệu trong MySQL và chỉ được chỉnh sửa table hay cột nào đó mà mình quy định. Trong SQL thì có cái để theo dõi quá trình INSERT, UPDATE, DELETE, không biết MySQL có không nữa, hình như nó gọi là ràng buộc :?smilie
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 06/02/2007 19:05:57 (+0700) | #9 | 40274
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

114v wrote:
Không biết các trang như Google, Yahoo, MSN dùng database nào smilie
 

Không rõ nhưng nếu xét trên mức dịch vụ thì hiện tại chỉ có Oracle là có thể đảm đương. MSN của MS nên có thể dùng MSSQL lắm.

114v wrote:

Nếu ai biết xin giải đáp chỗ này:
- Trong MySQL, ví dụ web bị hack mà lúc đó dữ liệu khá nhiều, lại không được backup, có cách nào để không cho phép xóa dữ liệu trong MySQL và chỉ được chỉnh sửa table hay cột nào đó mà mình quy định. Trong SQL thì có cái để theo dõi quá trình INSERT, UPDATE, DELETE, không biết MySQL có không nữa, hình như nó gọi là ràng buộc :?smilie  

Trên mỗi database có gán quyền cho một hoặc nhiều tài khoản. Trong đó, một tài khoản nào đó cho phép web application tương tác phải có đủ quyền để thực hiện công tác. Nếu web application đó đòi hỏi có đủ quyền để insert, update, delete... thì khi bị "hack" và account đó được dùng để tấn công thì chủ quyền nó vẫn có thể được sử dụng như đã ấn định.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   Re: MyISAM khác gì so với InnoDB 07/02/2007 12:44:06 (+0700) | #10 | 40440
aguest
Member

[Minus]    0    [Plus]
Joined: 07/09/2006 23:48:15
Messages: 90
Offline
[Profile] [PM]
Hai bác mod xin tiếp tục tranh luận, vì em càng học được nhiều.... smilie)

Anh YHT có nói một ý mà em thấy thú vị: là InnoDB cho phép mình tạo foreign key constraint, còn MyIASM thì phải giải quyết trên code. Theo kinh nghiệm của các huynh thì phương án nào tốt hơn? Nếu phải quyết định thì phải dựa trên những yếu tố nào? VD: độ lớn/phức tạp của CSDL, tài nguyên (programmer, thời gian), và khả năng bị lỗi nếu lập trình thiếu kinh nghiệm, ....

Sẵn tiện đây cũng có câu hỏi về khi insert 1 row vô table, theo các huynh cánh nào sau đây tốt nhất để tránh người dùng insert 2 cái giống nhau liên tục (VD khi bấm refresh):
1. Sau khi insert, header("Location:")
2. Trong hàm insert, kiểm tra trước coi có row nào giống vậy đã được insert chưa?
3. Cho MySQL giải quyết: cái này em cũng hông rõ phải làm sao? Không biết InnoDB có hỗ trợ tính năng này không?

Cám ơn các huynh.
[Up] [Print Copy]
  [Question]   Re: MyISAM khác gì so với InnoDB 07/02/2007 13:49:30 (+0700) | #11 | 40448
[Avatar]
YHT
Member

[Minus]    0    [Plus]
Joined: 21/04/2006 13:29:33
Messages: 173
Location: HCM
Offline
[Profile] [PM] [WWW] [Yahoo!]

aguest wrote:
Hai bác mod xin tiếp tục tranh luận, vì em càng học được nhiều.... smilie)

Anh YHT có nói một ý mà em thấy thú vị: là InnoDB cho phép mình tạo foreign key constraint, còn MyIASM thì phải giải quyết trên code. Theo kinh nghiệm của các huynh thì phương án nào tốt hơn? Nếu phải quyết định thì phải dựa trên những yếu tố nào? VD: độ lớn/phức tạp của CSDL, tài nguyên (programmer, thời gian), và khả năng bị lỗi nếu lập trình thiếu kinh nghiệm, ....

Sẵn tiện đây cũng có câu hỏi về khi insert 1 row vô table, theo các huynh cánh nào sau đây tốt nhất để tránh người dùng insert 2 cái giống nhau liên tục (VD khi bấm refresh):
1. Sau khi insert, header("Location:")
2. Trong hàm insert, kiểm tra trước coi có row nào giống vậy đã được insert chưa?
3. Cho MySQL giải quyết: cái này em cũng hông rõ phải làm sao? Không biết InnoDB có hỗ trợ tính năng này không?

Cám ơn các huynh. 

Thật tế thì các ứng dụng LỚN của các đại gia như Microsoft, Oracle hay Sybase khi mình phân tích database thì chẳng thấy một foreign key nào hết, mọi chuyện đều được giải quyết trực tiếp trong code. Nếu mình dùng constraint thì DBMS sẽ giải quyết dùm mình và sẽ trả về mã lỗi nếu dữ liệu vi phạm. Tự mình giải quyết cũng có cái hay và cũng có cái dở của nó. YHT xin đưa ra một trường hợp về hệ thống mình đã từng xây dựng: Hệ thống hoạt động trên MySQL 4.0 không hổ trợ InnoDB, có hai server 1 chính và 1 backup server, khi server chính bị hư thì toàn bộ hoạt động sẽ do server dự phòng dảm nhiệm (cũng có thể là tất cả dịch vụ, cũng có thể là chỉ có db thôi - hai cái này không đặt gần nhau). Vấn đề đặt ra là việc đồng bộ hoá dữ liệu giữa hai database. Nếu những server cao cấp hoặc dùng version MySQL có hổ trợ thì đơn giản, đằng này mình phải giải quyết bằng tay. Replicate cũng có cái khổ là mình phải làm theo đúng trình tự chèn dữ liệu vào (cha trước tới con). Nếu không có fk constraint mình thoải mái muốn làm cái nào trước cũng được. Những tables có liên kết vòng còn khổ sở nữa. Một vấn đề nữa là việc edit dữ liệu trực tiếp bằng tay, có fk vô là ôi thôi nó cứ la ầm lên.
Về chính thống thì db phải có fk (DBMS hổ trợ), YHT hiện thực hầu hết các ứng dụng đều có sử dụng vì nó tiện cho người lập trình. Không biết có anh em nào có ý kiến nào về việc này hay không?
Về ý thứ hai, khi refresh browser sẽ POST dữ liệu lên server và tiến trình insert cứ thế xảy ra tiếp tục, các row id thường thì ta để tự động nên sẽ chèn vào 2 row trùng nhau về nội dung nhưng vẫn phân biệt nên hợp lệ. Nếu muốn giải quyết thì bạn có thể tìm cách nào đó để đánh dấu/kiểm tra là row đó đã chèn vô rồi smilie, hoặc hiện thực phần flood control..., chuyện này sẽ bàn tiếp nha.
--YHT
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 07/02/2007 14:57:25 (+0700) | #12 | 40459
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]

conmale wrote:
Trên mỗi database có gán quyền cho một hoặc nhiều tài khoản. Trong đó, một tài khoản nào đó cho phép web application tương tác phải có đủ quyền để thực hiện công tác. Nếu web application đó đòi hỏi có đủ quyền để insert, update, delete... thì khi bị "hack" và account đó được dùng để tấn công thì chủ quyền nó vẫn có thể được sử dụng như đã ấn định. 


Ý em là kiểm soát quá trình DELETE, trong MSSQL, có hàm để kiểm soát. Ví dụ thằng nào đó vào xóa, nhưng em đã làm 1 hàm xác nhận với key theo thuật toán riêng, nếu không đúng key thì hủy giao dịch xóa đó để không cho xóa :wink:

Nếu làm 1 trang kiểu như myspace thì không biết MySQL có được không nhỉ smilie) Hiện tại thì em thấy các script PHP dùng MySQL đều không chơi fk gì cả mà tự xử lý trong code.

Bạn gì ơi, theo mình thì cách chống post bài trùng nhau là lúc bấm vào nút Gửi bài thì disable nút đó đi, gửi xong thì chuyển qua trang khác hoặc giới hạn thời gian gửi bài liên tiếp
[Up] [Print Copy]
  [Question]   Re: MyISAM khác gì so với InnoDB 14/02/2007 05:25:07 (+0700) | #13 | 41520
[Avatar]
LM
Moderator

Joined: 16/04/2002 09:27:22
Messages: 129
Offline
[Profile] [PM] [WWW] [Yahoo!]
http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/
đọc cái này thêm thông tin. Hoặc dùng Google search "MyISAM vs InnoDB"
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 01/03/2007 17:53:47 (+0700) | #14 | 43874
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
InnoDB nếu so sánh là hơn MyISAM, nhưng kẹt nỗi lại không hỗ trợ FULLTEXT. Ý định của em là dùng MyISAM, sau đó dùng các câu lệnh LOW... của MYSQL để insert và update dữ liệu. Em thấy các trang như blog yahoo, google analytic dường như không update ngay lập tức, mà chờ sau khoảng thời gian nào đó. Chắc có lẽ họ dùng các câu lệnh đó. Không biết có phải không nữa smilie?
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 01/03/2007 20:50:35 (+0700) | #15 | 43876
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

114v wrote:
InnoDB nếu so sánh là hơn MyISAM, nhưng kẹt nỗi lại không hỗ trợ FULLTEXT. Ý định của em là dùng MyISAM, sau đó dùng các câu lệnh LOW... của MYSQL để insert và update dữ liệu. Em thấy các trang như blog yahoo, google analytic dường như không update ngay lập tức, mà chờ sau khoảng thời gian nào đó. Chắc có lẽ họ dùng các câu lệnh đó. Không biết có phải không nữa smilie


Em vẫn có thể ấn định table type cho từng table nếu muốn. Nếu cần dùng đến full text search cho table nào đó thì ấn định MyISAM, nếu không thì dùng InnoDB. Table nào dùng để commit thường xuyên thì không nên dùng MyISAM bởi vì khi cần phải lock để commit thì nó lock cả table --> kẹt.

Thân.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 02/03/2007 05:26:13 (+0700) | #16 | 43986
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
Kẹt một nỗi là nó lại vừa phải FULLTEXT, vừa phải insert và update nhiều, hic
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 02/03/2007 05:50:06 (+0700) | #17 | 43994
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

114v wrote:
Kẹt một nỗi là nó lại vừa phải FULLTEXT, vừa phải insert và update nhiều, hic 


Nếu ứng dụng không quá busy (nhiều người dùng) thì ok. Còn không thì dùng CSDL khác smilie).
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 02/03/2007 08:51:42 (+0700) | #18 | 44014
[Avatar]
xnohat
Moderator

Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!] [MSN]
Kiến nghị là Oracle 10g rất tốt cho các database cỡ trung. Oracle tốt hơn Mysql nhiều bạn à.
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 03/03/2007 14:51:48 (+0700) | #19 | 44295
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
Chắc anh em mình lo bò trắng răng smilie chứ cái wikipedia cũng đang dùng MySQL, cũng không đến nỗi nào smilie
[Up] [Print Copy]
  [Question]   MyISAM khác gì so với InnoDB 20/04/2007 07:44:24 (+0700) | #20 | 54727
114v
Member

[Minus]    0    [Plus]
Joined: 08/07/2006 23:27:00
Messages: 191
Offline
[Profile] [PM]
Mọi người nói InnoDB chậm hơn MYISAM nhưng tại sao trong bài viết này, các benchmark đều cho thấy kết quả ngược lại ?!?

http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1

Chắc đây là cách khắc phục nhược điểm của MyISAM:
http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

Không biết kết hợp dùng InnoDB và những cách khắc phục nhược điểm của MyISAM thì có sao không nữa smilie
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|