Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Menyimulasikan TTL tingkat sel
Di Bigtable, kebijakan pembersihan sampah ditetapkan di
level grup kolom, dan Anda tidak dapat menentukan kebijakan pembersihan sampah
level sel. Namun, Anda dapat menyimulasikan kebijakan time to live (TTL) di tingkat sel
dengan mengubah setelan pembersihan sampah. Halaman ini menjelaskan beberapa pendekatan
yang dapat Anda gunakan.
Sebelum membaca halaman ini, Anda harus membaca ringkasan pembersihan sampah. Untuk mempelajari cara mengirim permintaan tulis, yang
menyertakan stempel waktu, lihat Penulisan Bigtable.
Masa berlaku satu detik
Dalam pendekatan ini, tetapkan aturan pembersihan sampah agar masa berlaku data berakhir setelah satu
detik. Setiap kali Anda menulis data, tetapkan stempel waktu sel ke waktu yang Anda inginkan untuk berakhirnya masa berlaku nilai. Selama pemadatan, Bigtable akan menghapus sel apa pun
yang memiliki stempel waktu setidaknya satu detik sebelumnya. Misalnya, jika Anda menetapkan stempel waktu sel ke 30 April pukul 09.00.00, sel akan dihapus beberapa saat setelah 30 April pukul 09.00.01. Dengan pendekatan ini, Anda dapat menetapkan nilai habis masa berlaku yang berbeda untuk sel yang berbeda dalam grup kolom yang sama.
Keuntungan masa berlaku satu detik
Stempel waktu memiliki arti sebenarnya: waktu habis masa berlaku.
Kekurangan masa berlaku satu detik
Setiap aplikasi yang menulis data ke keluarga kolom Bigtable ini harus dikonfigurasi untuk mengikuti aturan ini. Jika Anda lupa dan menggunakan stempel waktu server default pada operasi tulis, data tersebut akan segera berakhir masa berlakunya dan dihapus selama pemadatan berikutnya.
Karena stempel waktu Anda tidak "nyata", Anda tidak dapat menggunakan stempel waktu untuk kasus penggunaan
lain, seperti menentukan kapan nilai ditulis. Sebagai solusinya, Anda dapat menulis stempel waktu sebenarnya ke kolom terpisah, tetapi hal ini akan meningkatkan jumlah data yang Anda simpan.
Anda tidak dapat menerapkan strategi ini pada keluarga kolom yang sudah memiliki data
dengan stempel waktu yang sebenarnya. Jika data yang ada memiliki stempel waktu yang sebenarnya, atau jika Anda
tidak sengaja menulis data baru dengan stempel waktu yang sebenarnya, data tersebut akan dihapus
selama pemadatan berikutnya.
Anda tidak dapat menentukan bahwa beberapa sel untuk baris dan kolom tertentu harus berakhir masa berlakunya secara bersamaan. Data baru akan menimpa data lama dengan stempel waktu yang sama.
Karena pembersihan sampah dapat memerlukan waktu hingga seminggu, Anda harus selalu menggunakan filter saat membaca data.
Masa berlaku default
Misalnya, Anda ingin sebagian besar data memiliki TTL default, tetapi Anda ingin menetapkan nilai masa berlaku per sel yang berbeda untuk beberapa data.
Misalnya, Anda dapat menyimpan peristiwa klik untuk sepuluh pelanggan dalam satu tabel. Sebagian besar peristiwa klik akan berakhir masa berlakunya setelah 2 hari, tetapi Anda memiliki satu pelanggan yang peristiwa kliknya akan berakhir masa berlakunya setelah satu jam, dan Anda memiliki pelanggan lain yang peristiwa kliknya akan berakhir masa berlakunya setelah 3 hari.
Dalam pendekatan ini, buat keluarga kolom dengan batas usia untuk pengumpulan
sampah yang ditetapkan ke TTL default. Untuk data yang masa berlakunya ingin Anda percepat dari default, tetapkan stempel waktu lebih awal dari waktu data benar-benar ditulis. Untuk data yang masa berlakunya ingin Anda hentikan nanti, tetapkan stempel waktu agar lebih lama dari waktu data sebenarnya ditulis.
Keunggulan masa berlaku default
TTL default diterapkan untuk operasi tulis yang tidak memiliki TTL kustom.
Pendekatan ini dapat diterapkan dengan aman ke tabel yang sudah ada.
Kekurangan masa berlaku default
Stempel waktu tidak bermakna secara semantik karena stempel waktu sel
mungkin nyata atau buatan. Artinya, Anda tidak dapat menggunakan stempel waktu
sel untuk kasus penggunaan lainnya, seperti menentukan kapan nilai ditulis.
Sebagai solusinya, Anda dapat menulis stempel waktu sebenarnya ke kolom terpisah, tetapi hal ini akan meningkatkan jumlah data yang Anda simpan.
Anda dapat secara tidak sengaja menulis stempel waktu kustom yang bertentangan dengan stempel waktu sebenarnya di kolom tertentu.
Karena pembersihan sampah bersifat asinkron, Anda tetap harus selalu menggunakan
filter saat membaca data saat menggunakan strategi ini.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-08-27 UTC."],[[["\u003cp\u003eThis page details methods to simulate cell-level time-to-live (TTL) policies in Bigtable, which natively only supports garbage collection at the column family level.\u003c/p\u003e\n"],["\u003cp\u003eThe "one-second expiration" approach involves setting a column family's garbage collection rule to expire data after one second, with the cell's timestamp set to the desired expiration time.\u003c/p\u003e\n"],["\u003cp\u003eThe "default expiration" strategy involves setting a default TTL at the column family level, while allowing for per-cell adjustments by manipulating the cell's timestamp.\u003c/p\u003e\n"],["\u003cp\u003eBoth expiration approaches use timestamps that may not be semantically meaningful for data creation time and require filters when reading data due to asynchronous garbage collection.\u003c/p\u003e\n"],["\u003cp\u003eBoth approaches have some advantages, such as how default expiration can be safely applied to pre-existing table, but also disadvantages such as the data write process needing to be configured correctly in the one-second approach.\u003c/p\u003e\n"]]],[],null,["# Simulate cell-level TTL\n=======================\n\nIn Bigtable, garbage collection policies are set at the\ncolumn family level, and you cannot specify a cell-level garbage collection\npolicy. However, you can simulate a time to live (TTL) policy at the cell level\nby changing your garbage collection settings. This page explains a few different\napproaches that you can use.\n\nBefore you read this page, you should read the [garbage collection overview](/bigtable/docs/garbage-collection). To learn how to send write requests, which\ninclude timestamps, see [Bigtable writes](/bigtable/docs/writes).\n\nOne-second expiration\n---------------------\n\nIn this approach, set your garbage collection rule to let data expire after one\nsecond. Whenever you write data, set the cell's timestamp to the time you want\nthe value to expire. During compaction, Bigtable deletes any cells\nthat have a timestamp that is at least one second in the past. For example, if\nyou set a cell's timestamp to April 30 at 9:00:00 AM, the cell is deleted\nsometime after April 30 at 9:00:01 AM. This approach enables you to set\ndifferent expiration values for different cells in the same column family.\n\n### Advantages of one-second expiration\n\n- The timestamp has a real meaning: the expiration time.\n\n### Disadvantages of one-second expiration\n\n- Every application that writes data to this Bigtable column\n family needs to be configured to follow this rule. If you forget and use a\n default server timestamp on a write, that data expires right away\n and is deleted during the next compaction.\n\n- Because your timestamps aren't \"real\" you cannot use timestamps for any other\n use case, such as determining when a value was written. As a workaround, you can\n write the real timestamp to a separate column, but this will increase the amount\n of data you store.\n\n- **You cannot implement this strategy on a column family that already has data\n with real timestamps.** If existing data has real timestamps, or if you\n accidentally write new data with real timestamps, that data is deleted\n during the next compaction.\n\n- You cannot specify that multiple cells for a given row and column should\n expire at the same time as each other. New data will overwrite old data with the\n same timestamp.\n\n- Because garbage collection can take up to a week, you always need to use\n filters when you read the data.\n\nDefault expiration\n------------------\n\nLet's say you want most of your data to have a default TTL, but you want to set\ndifferent per-cell expiration values for some of your data.\n\nFor example, you might store click events for ten customers in one table. Most\nof the click events should expire after 2 days, but you have one customer whose\nclick events should expire after an hour, and you have another customer whose\nclick events should expire after 3 days.\n\nIn this approach, create your column family with an age limit for garbage\ncollection set to the default TTL. For data you want to expire sooner than the\ndefault, set the timestamp to be earlier than the time the data is actually\nwritten. For data you want to expire later, set the timestamp to be later than\nthe time the data is actually written.\n\n### Advantages of default expiration\n\n- A default TTL is in place for writes that do not have a custom TTL.\n\n- This approach can safely be applied to a pre-existing table.\n\n### Disadvantages of default expiration\n\n- The timestamp is not semantically meaningful because a cell's timestamp\n might be real or artificial. This means you cannot use the cells'\n timestamps for any other use case, such as determining when a value was written.\n As a workaround, you can write the real timestamp to a separate column, but\n this will increase the amount of data you store.\n\n- You can inadvertently write a custom timestamp that clashes with a real\n timestamp in a given column.\n\n- Because garbage collection is asynchronous, you still need to always use\n filters when you read the data when you use this strategy.\n\nWhat's next\n-----------\n\n- Read about garbage collection with [timestamps that are sequential numbers](/bigtable/docs/gc-sequence-numbers).\n- Learn a strategy to [always read the most recent value of a column](/bigtable/docs/keep-only-latest-value).\n- Review code samples showing how to [configure garbage collection](/bigtable/docs/configuring-garbage-collection).\n- Learn more about [storage pricing](/bigtable/pricing#storage)."]]