읽기 전용 복제본(Read Replicas) 
    import  { sql }  from  'drizzle-orm' ; import  { drizzle }  from  'drizzle-orm/node-postgres' ; import  { boolean ,  jsonb ,  pgTable ,  serial ,  text ,  timestamp ,  withReplicas }  from  'drizzle-orm/pg-core' ; const  usersTable  =  pgTable ( 'users' ,  { 	id :  serial ( 'id'  as  string ) .primaryKey () , 	name :  text ( 'name' ) .notNull () , 	verified :  boolean ( 'verified' ) .notNull () .default ( false ) , 	jsonb :  jsonb ( 'jsonb' ) .$type () , 	createdAt :  timestamp ( 'created_at' ,  { withTimezone :  true  }) .notNull () .defaultNow () , }); const  primaryDb  =  drizzle ( "postgres://user:password@host:port/primary_db" ); const  read1  =  drizzle ( "postgres://user:password@host:port/read_replica_1" ); const  read2  =  drizzle ( "postgres://user:password@host:port/read_replica_2" ); const  db  =  withReplicas (primaryDb ,  [read1 ,  read2]);   import  { drizzle }  from  "drizzle-orm/mysql2" ; import  mysql  from  "mysql2/promise" ; import  { boolean ,  mysqlTable ,  serial ,  text ,  withReplicas }  from  'drizzle-orm/mysql-core' ; const  usersTable  =  mysqlTable ( 'users' ,  { 	id :  serial ( 'id'  as  string ) .primaryKey () , 	name :  text ( 'name' ) .notNull () , 	verified :  boolean ( 'verified' ) .notNull () .default ( false ) , }); const  primaryClient  =  await  mysql .createConnection ({   host :  "host" ,   user :  "user" ,   database :  "primary_db" , }) const  primaryDb  =  drizzle ({ client :  primaryClient }); const  read1Client  =  await  mysql .createConnection ({   host :  "host" ,   user :  "user" ,   database :  "read_1" , }) const  read1  =  drizzle ({ client :  read1Client }); const  read2Client  =  await  mysql .createConnection ({   host :  "host" ,   user :  "user" ,   database :  "read_2" , }) const  read2  =  drizzle ({ client :  read2Client }); const  db  =  withReplicas (primaryDb ,  [read1 ,  read2]);   import  { sql }  from  'drizzle-orm' ; import  { sqliteTable ,  int ,  text ,  withReplicas }  from  'drizzle-orm/sqlite-core' ; import  { createClient }  from  '@libsql/client' ; import  { drizzle }  from  'drizzle-orm/libsql' ; const  usersTable  =  sqliteTable ( 'users' ,  { 	id :  int ( 'id'  as  string ) .primaryKey () , 	name :  text ( 'name' ) .notNull () , }); const  primaryDb  =  drizzle ({ client :  createClient ({ url :  'DATABASE_URL' ,  authToken :  'DATABASE_AUTH_TOKEN'  }) }); const  read1  =  drizzle ({ client :  createClient ({ url :  'DATABASE_URL' ,  authToken :  'DATABASE_AUTH_TOKEN'  }) }); const  read2  =  drizzle ({ client :  createClient ({ url :  'DATABASE_URL' ,  authToken :  'DATABASE_AUTH_TOKEN'  }) }); const  db  =  withReplicas (primaryDb ,  [read1 ,  read2]);   import  { drizzle }  from  "drizzle-orm/singlestore" ; import  mysql  from  "mysql2/promise" ; import  { boolean ,  singlestoreTable ,  serial ,  text ,  withReplicas }  from  'drizzle-orm/singlestore-core' ; const  usersTable  =  singlestoreTable ( 'users' ,  { 	id :  serial ( 'id'  as  string ) .primaryKey () , 	name :  text ( 'name' ) .notNull () , 	verified :  boolean ( 'verified' ) .notNull () .default ( false ) , }); const  primaryClient  =  await  mysql .createConnection ({   host :  "host" ,   user :  "user" ,   database :  "primary_db" , }) const  primaryDb  =  drizzle ({ client :  primaryClient }); const  read1Client  =  await  mysql .createConnection ({   host :  "host" ,   user :  "user" ,   database :  "read_1" , }) const  read1  =  drizzle ({ client :  read1Client }); const  read2Client  =  await  mysql .createConnection ({   host :  "host" ,   user :  "user" ,   database :  "read_2" , }) const  read2  =  drizzle ({ client :  read2Client }); const  db  =  withReplicas (primaryDb ,  [read1 ,  read2]);       
여러분의 프로젝트에서 읽기 전용 복제본 인스턴스 세트를 사용하고, 읽기 전용 복제본에서 SELECT 쿼리를 관리하고 기본 인스턴스에서 생성, 삭제, 업데이트 작업을 수행할 수 있는 편리한 방법이 필요하다면, Drizzle의 withReplicas() 함수를 활용할 수 있습니다.
이제 db 인스턴스를 이전과 동일한 방식으로 사용할 수 있습니다. Drizzle은 읽기 전용 복제본과 기본 인스턴스 간의 선택을 자동으로 처리합니다.
// read1 또는 read2 연결에서 읽기 await  db .select () .from (usersTable) // 삭제 작업을 위해 기본 데이터베이스 사용 await  db .delete (usersTable) .where ( eq ( usersTable .id ,  1 )) $primary 키를 사용하면 읽기 작업에서도 기본 인스턴스를 강제로 사용할 수 있습니다.
// 기본 인스턴스에서 읽기 await  db . $primary .select () .from (usersTable); Drizzle을 사용하면 읽기 전용 복제본을 선택하는 커스텀 로직을 지정할 수도 있습니다. 가중치를 적용하거나 다른 커스텀 선택 방법을 사용하여 무작위로 읽기 전용 복제본을 선택할 수 있습니다. 다음은 첫 번째 복제본이 70%의 확률로 선택되고 두 번째 복제본이 30%의 확률로 선택되는 커스텀 로직을 구현한 예제입니다.
읽기 전용 복제본을 선택하는 무작위 선택 방법은 어떤 타입으로도 구현할 수 있습니다.
const  db  =  withReplicas (primaryDb ,  [read1 ,  read2] ,  (replicas)  =>  {     const  weight  =  [ 0.7 ,  0.3 ];     let  cumulativeProbability  =  0 ;     const  rand  =  Math .random ();     for  ( const  [ i ,  replica ]  of  replicas .entries ()) {       cumulativeProbability  +=  weight[i] ! ;       if  (rand  <  cumulativeProbability)  return  replica;     }     return  replicas[ 0 ] ! }); await  db .select () .from (usersTable)