activo | asset management system

Friday, September 25, 2009

Twitter - Behind The Scene

twitter logoKemarin, saya me-Unfollow akun Twitter seorang penyiar radio yang lumayan aktif. Sehari mungkin bisa lebih dari 100 update status Twitter. Ketika saya Unfollow lalu saya cek kembali Beranda Twitter saya, seluruh Twitter si penyiar tersebut langsung hilang. Proses melakukan Unfollow di Twitter itu cepat sekali.

Tadinya saya berpikir, jika saya unfollow seseorang, apakah Twitter melakukan penghapusan seluruh history Status si penyiar tersebut di akun saya? Setelah saya pikir kembali, setiap ada status terbaru, Twitter tidak mungkin menyimpan status (proses SQL Insert) ke akun saya, tapi hanya membaca dari sebuah Table. Kenapa? Proses demikian akan membuat sampah yang sangat banyak di database. Proses DELETE itu memang menghapus data, tapi space-nya di table, tidak ikut terhapus. Artinya, akan banyak sampah data kosong jika setiap akun menyimpan history status yang di-Follow.

Untuk menampilkan status-status Tweet yang kita Follow, Twitter hanya melakukan query database sederhana.

Saya akan coba gambarkan bagaimana cara kerja Twitter(versi saya). Misalkan Table-table di Twitter sederhananya seperti ini:

User
- UserId
- UserName

Friend
- UserId (integer)
- FriendId (integer)
- Name (varchar(250))
- dll

Status
- StatusId
- StatusDescription
- StatusDate
- UserId

Maka, query yang bekerja untuk memunculkan status terbaru di Beranda kita, akan seperti ini:

TSQL:

Select Top 50 StatusDescription, StatusId, StatusDate 
From
Status
where UserId in
( Select FriendId From Friend Where UserId = @UserId )
order by StatusDate DESC

MySQL:
Select StatusDescription, StatusId, StatusDate 
From
Status
where UserId in
( Select FriendId From Friend Where UserId = @UserId )
order by StatusDate DESC LIMIT 50

Sehingga ketika kita melakukan unfollow seseorang, Twitter hanya menghapus FriendId dari Table Friend. Query-nya akan seperti ini:
Delete Friend
Where FriendId = @FriendId
and UserId = @UserId

Nah, yang jadi perhatian saya, bagaimana Twitter me-maintenance satu table bernama Status itu?

Bayangkan jika 1 miliar lebih pengguna Twitter mengupdate status sehari minimal 10 kali? Artinya, akan ada minimal 10 miliar baris per hari masuk ke table Status. Edan!!! 10 miliar baris perhari?!!!

Fiuh... Kalau saya ditunjuk menjadi DBA di Twitter, saya tidak akan mau. Takut databasenya rontok ^_^v

Komentar Terbaru