我想實現的Instagram的UUID,他們在這篇文章中談到:http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagramInstragram的UUID創建失敗
我的實現看起來是這樣的:
CREATE OR REPLACE FUNCTION engagement.next_id(OUT result bigint) AS $$
DECLARE
our_epoch bigint := 1314220021721;
seq_id bigint;
now_millis bigint;
shard_id int := 5;
BEGIN
SELECT nextval('engagement.table_id_seq') %% 1024 INTO seq_id;
SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO now_millis;
result := (now_millis - our_epoch) << 23;
result := result | (shard_id << 10);
result := result | (seq_id);
END;
$$ LANGUAGE PLPGSQL;
但我不斷收到此錯誤:
Warning: pg_execute(): Query failed: ERROR: relation "engagement.table_id_seq" does not exist LINE 1: SELECT nextval('engagement.table_id_seq') %% 1024^QUERY: SELECT nextval('engagement.table_id_seq') %% 1024 CONTEXT: PL/pgSQL function next_id() line 8
我實際上是否想創建一個名爲table_id_seq或不同的表?
爲什麼Instangram有一個大小的限制 - 如果它們有更大的UID,那麼數據庫查詢的運行速度不夠快? – JoeTidee