Thứ Tư, 24 tháng 6, 2015

Transaction trong php va mysql

Transcaction là gì :
Transcation là 1 nhóm các câu lệnh sql được xử lý tuần tự nhưng được xem là 1 thao tác duy nhất.

ví dụ. trong 1 nhóm câu lệnh có 1 lệnh xử lý không thành công thì transcation sẽ ko thành công

storage là Inodb : sẽ thiết lập transcation

1 số vị dụ thực tế cần sử dụng transcation
: ví dụ khi rút tiền hệ thống đã trừ tiền nhưng chưa trả tiền
hoặc khi mua 1 đơn hàng qua paypal số tiền trong tk bị trừ nhưng trạng thái trả tiền lại chưa...



A chuyển tiền cho B, A bị trừ tiền rồi, đang cập nhật tiền mới cho B thì mất điện.

Thuộc tính
+ Tính cô lập : các transcation hoạt động độc lập nhâu. ví dụ transcation của máy này sẽ hoạt động sẽ không ảnh hưởng tới máy khác
+Tính bền vững. : đảm bảo kết quả hoặc tác động của transcation luôn tồn tại cho dù hệ thống có bị lỗi
+Tính nhất quán : đảm bảo tất cả csd sẽ được thay đổi khi hoàn thành xong transcation
+ Tính tự trị

MỘT SỐ LƯU Ý KHI SỬ DỤNG TRANSACTION

Các câu lệnh SQL thực hiện tuần tự trong một Transaction là hoàn toàn độc lập so với ngôn ngữ lập trình. Vì vậy một khối lệnh SQL có thể được xây dựng tuần tự bởi ngôn ngữ lập trình mà bạn đang sử dụng để có thể tạo ra được ứng dụng mong muốn.
  • Cần sử dụng storage engine InnoDB cho table dữ liệu.
  • Đảm bảo một client tạo ra một phiên kết nối với MySQL để cô lập được các transaction ở các client khác nhau. (Ví dụ như không sử dụng hàm pconnect trong mysql khi sử dụng Transaction)
  • Bắt buộc phải sử dụng START TRANSACTION;BEGIN; để bắt đầu một Transaction
  • Có thể thực hiện nhiều câu lệnh SELECT, INSERT, UPDATE, DELETE sau lệnh BEGIN;
  • Đảm bảo kiểm tra nếu toàn bộ các câu lệnh thực hiện thành công, chính xác thì thực hiện COMMIT, ngược lại có một lệnh thất bại thì thực hiện lệnh ROLLBACK
Sử dụng với PHP
try {
    // First of all, let's begin a transaction
    $db->beginTransaction();

    // A set of queries; if one fails, an exception should be thrown
    $db->query('first query');
    $db->query('second query');
    $db->query('third query');

    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed, and we can commit the transaction
    $db->commit();
} catch (Exception $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
}


Thứ Sáu, 19 tháng 6, 2015

Xây dựng API với PHP, Restful với smartphone với thư viện slim

1. Cơ bản về API
ảnh dưới đây là kiến trúc 1 API
http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/

Chủ Nhật, 14 tháng 6, 2015

OPP trong PHP

Có 4 tính chất của lập trình hướng đối tượng.
1. Tính kế thừa
2. Tình đa hình
3. Tính trừu tượng
4. Tính đóng gói

.Tính kế thừa: 1 lớp có thể kế thừa từ lớp cha
ví dụ
class A extend B

. Tính đa hình.
ví dụ 1 lớp A có 1 function là getdata (tính theo công thức khác)
và 1 lớp B có 1 function là get data (tính theo công thức khác)
getdata là 1 function chung
khi sử dụng có thể dùng A.getdata hoặc B.getdata
Hiểu đơn giản là các phương thức trong lớp A có thể trùng tên với các phương thức trong lớp B
nhưng tính chất các phương thức đó là khác nhau
Tính đóng gói
Đối tượng của lớp A chỉ truy xuất dữ



Thứ Ba, 9 tháng 6, 2015

Web API là gì

1. API là gì
API là viết tắt của Application Progaramming  Interface
API Hiểu đơn giản đó là các function , các method để cho các ứng dụng bên ngoài có thể truy xuất để trao đổi thông tin

Thứ Hai, 1 tháng 6, 2015

So sánh các storage in phpmyadmin

khi tạo 1 table trong phpmyadmin có các kiểu storage cho ta chọn lựa.
mặc định sẽ là myisam (được dùng phổ biến)

- MyIsam : cho phép lập chỉ mục toàn cột (full text index) =>cho phép truy xuất đọc và tìm kiếm nhanh nhất so với các storage khác.
Nhược điểm : Hoạt động theo kiểu table level locking nên khi cập nhật thao tác thêm xóa sửa trong 1 bảng thì table đó sẽ bị khóa lại cho đến khi thao tác cập nhật trước thành công

Hiểu đơn giản. ví dụ có 2 hoạt động cùng update vào 1 table thì hoạt động 1 xử lý thành công thì mới đến hoạt động 2 ( cả 2 ko thể cùng 1 lúc được)
-MyIsam không kiểm tra ràng buộc nên bảng dễ bị crash hoặc hỏng chỉ mục..

Kiểu storage thứ 2 đó là inodb
- Không hỗ trợ full text search (sắp tới sẽ hỗ trợ nhưng ở bản mysql cao chưa biết...)
- Hỗ trợ quan hệ giữa các bảng (khó ngoại)=>tính toàn vẹn dữ liệu cao => khó bị hỏng chị mục index và khó bị crash
- Hoạt động theo kiểu row level locking nên khi cập nhật thêm sửa xóa 1 bảng thì chỉ có bản ghi đó bị khóa còn lại các thao tác trên các row khác hoàn toàn bình thường
=> hay dùng với ngân hàng hoặc web có tần xuất cập nhật dữ liệu cao
hoạt động tốn ram hơn so với myisam
Inodb hỗ trợ transaction còn myisam thì không
Nếu muốn chuyển từ myisam sang inodb thì nếu trường hợp cột nào có full text search thì phải xóa full text search đi mới chuyển được

Kiểu storage thứ 3 memory
- Lưu trữ dữ liệu trực tiếp trên ram =>truy xuất cực nhanh =>thường dùng chứa dữ liệu tạm như các phiên làm việc của user
Khi khởi động lại mysql thì dữ liệu có kiểu storage sẽ bị mất hết dữ liệu
Sử dụng cơ chế table-level -locking giống myisam
Mặc định dung lượng 1 bảng có storage memory sẽ là 16MB max

Túm lại
1 ứng dụng có tàn xuất đọc cao như tin tức, báo .. thì dùng storage myisam
1 ứng dụng có tần xuất update dữ liệu cao như diễn đàn thì dùng inodb