рдпрд╣ рдкрдВрдХреНрддрд┐ рд╕рдорд╛рдирддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рд░ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣реА рд╣реИ
рдХреБрдЫ рдХреЙрд▓рдо рд╡рд┐рд╢рд╛рд▓ рдЯреЗрдХреНрд╕реНрдЯ рдбрдВрдк рдпрд╛ JSON рдХреЙрдиреНрдлрд┐рдЧрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рдордЭрджрд╛рд░ рдлрд┐рд▓реНрдЯрд░ рдлрд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪреИрдирд▓реЛрдВ рдХрд╛ рдирд╛рдо рдИрдЯреАрдПрд╕ рдореЗрдВ рдореВрд▓реНрдп рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬреАрдмреА рднреАред
рдЙрд╕ рдмрдЧ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рдЬрд╛рдБрдЪ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
https://github.com/supabase/realtime/blob/894f4bb89230174677878803711d8adbef8c090fe/server/lib/realtime/subscribers.notification.ex#L140 -L142
рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреЗрд╡рд▓ 100 рдкреНрд░рддреАрдХреЛрдВ рддрдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЕрдЪреНрдЫрд╛ рдзрдиреНрдпрд╡рд╛рдж @ abc3ред
рдореБрджреНрджреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдЕрдкрдирд╛ рдХреЛрдб рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП
рдореИрдВ рдЗрд╕реЗ рд╡рд┐рдлрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛ -
рдореИрдВ рдХреБрдВрдЬреА 2500 рд▓рдВрдмрд╛рдИ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ рдХреЗ рд╕рд╛рде рдЬрд╛рдБрдЪ рдХреА рд╣реИред рдореИрдВ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдмрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдЖрдк рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рд╣реИред :рд╢рд░рдорд╛рдирд╛:
рдореИрдВ рд░реАрдпрд▓рдЯрд╛рдЗрдо рдХреА рдПрдХ рдирдИ рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ ( 894f4bb89230
рдХрдорд┐рдЯ рдХрд░реЗрдВ), рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдкреНрд╕ ( mix deps.get
) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдиреЛрдб рдЬреЗрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ( yarn install
)ред рдореИрдВ db рдХреЛ рдиреЛрдб-рдЬреЗрдПрд╕ рдЙрджрд╛рд╣рд░рдг ( docker-compose up db
) рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ:
PORT=4000 \
HOSTNAME=localhost \
DB_USER=postgres \
DB_HOST=localhost \
DB_PASSWORD=postgres \
DB_NAME=postgres \
DB_PORT=5432 \
DB_PORT=5432 \
SLOT_NAME=TEST_SLOT \
mix phx.server
рдФрд░ рдиреЛрдб-рдЬреЗрдПрд╕ рдЙрджрд╛рд╣рд░рдг ( yarn run start
)ред
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдбреЗрдЯрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
import psycopg2
import time
def main():
conn = psycopg2.connect(
host="localhost",
database="postgres",
user="postgres",
password="postgres"
)
cur = conn.cursor()
name = 'name'
cur.execute("INSERT INTO users(name) VALUES(%s)", (name, ))
conn.commit()
main()
рдФрд░ рдореИрдВ рдиреЛрдб-рдЬреЗрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ 4000 рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ ( name = 'name' * 1000
) рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ name = 'name' * 1000000
( 1_000_000
) рддрдХ рд▓рдЧрд╛рддрд╛рд░ (10 рдореЗрдВ 10) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдПрдХ рдмрдбрд╝реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдЫреЛрдЯреА рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдиреЛрдб-рдЬреЗрдПрд╕ рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
import psycopg2
import time
def main():
conn = psycopg2.connect(
host="localhost",
database="postgres",
user="postgres",
password="postgres"
)
cur = conn.cursor()
name = 'name' * 1000000
cur.execute("INSERT INTO users(name) VALUES(%s)", (name, ))
conn.commit()
name = 'name'
cur.execute("INSERT INTO users(name) VALUES(%s)", (name, ))
conn.commit()
main()
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЪреИрдирд▓реЛрдВ рдореЗрдВ рдмрдбрд╝реЗ рдкреЗрд▓реЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред
рдПрдХ рдЖрдЦрд┐рд░реА рдкреНрд░рдпреЛрдЧ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЕрдВрддрд░рд╛рд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
select
slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS replicationSlotLag, active
from pg_replication_slots ;
рдЖрдо рддреМрд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╣реИ:
slot_name | replicationslotlag | active
-----------+--------------------+--------
test_slot | 56 bytes | t
(1 row)
рдореИрдВ рдЕрдкрдиреА рдкрд╛рдЗрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рддрд╛ рд╣реБрдЖ рджреЗрдЦрддрд╛ рд╣реВрдВ (рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд▓рдЧрднрдЧ 40kB рдмрдврд╝рддрд╛ рд╣реИ)ред @ w3b6x9 рдиреЗ рдореБрдЭреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдпрд╣ рдЖрдХрд╛рд░ 20MB рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд░рд┐рдпрд▓ рдЯрд╛рдЗрдо рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдУрдПрд╕ (SIGKILL рдХреЗ рд╕рд╛рде) рдХреЛ рдорд╛рд░ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ (рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ) рдмреИрдХрд▓реЙрдЧ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдорд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдврд╝рддрд╛ рд░рд╣рддрд╛ рд╣реИред
рдмрдбрд╝реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рджреГрд╢реНрдпрдорд╛рди рдореБрджреНрджреЗ рд╣реИрдВ:
рдореЗрд░рд╛ рд╢рд┐рдХреНрд╖рд┐рдд рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рджреЛ рдореБрдЦреНрдп рдореБрджреНрджреЗ рд╣реИрдВ (рд╢рд╛рдпрдж рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рд╢рд╛рдпрдж рдирд╣реАрдВ):
рд▓реЗрдХрд┐рди name = 'name' * 1000000
рдХреЗрд╡рд▓ 40MB рд╣реИ: рднреНрд░рдорд┐рдд:
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ @fracek рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЧрд╣рд░рд╛ рдЧреЛрддрд╛
Btw, рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг ~ 10sec рдХреА рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рд╡рд┐рд▓рдВрдмрддрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рджрд╕ рдПрдордмреА MB рдХреЗ рд▓рд┐рдП рд╣реИред
export default async (req, res) => {
const values = Array(1000000).fill("name").join('')
const text = `INSERT INTO stress(value) VALUES('${values}') RETURNING id`
const q = await pool.query(text)
res.json(JSON.stringify(q.rows))
}
@ abc3 рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/supabase/realtime/pull/120
рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░реЛрдбрдХреНрдЯ рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдкреАрдЖрд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрджрд┐ рдЗрд╕ рдкреАрдЖрд░ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рдзреАрдорд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд▓рдВрдмрддрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдореИрдВрдиреЗ рдЕрдкрдиреА рдЧрдгрдирд╛ рдореЗрдВ рдЧрд▓рддреА рдХреА рд╣реИ: 40 рдирд╣реАрдВ рдмрд▓реНрдХрд┐ 4 рдПрдордмреА))
рдЗрд╕ INSERT INTO users(name) VALUES(repeat('name', 1000000))
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╛ рд▓рд┐рдпрд╛ рд╣реИ!
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдбрд┐рдмрдЧ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛:
рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреБрдЫ рд╕реЗрдХрдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИрдВ:
https://github.com/supabase/realtime/blob/894f4bb89230174677878803711d8adbef8c090fe/server/lib/realtime/replication/ex#L72 -L73
рдореИрдВ рдлрд┐рдХреНрд╕ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдЕрднреА рднреА рд╡реЗрдмрд╕реНрдХреЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрддреНрддрд░рджрд╛рдпреА рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд▓рдВрдмреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбреАрдХреЛрдб рдФрд░ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
https://github.com/supabase/realtime/blob/894f4bb8923017467c78803711d8adbef8c090fe/examples/next-js/pages/index.js#L28
рдЙрд╕реЗ рдмрджрд▓реЗрдВ
https://github.com/supabase/realtime/blob/894f4bb89230174677878803711d8adbef8c090fe/examples/next-js/pages/index.js#L44 -L53
рд╕рд╛рде рд╕реЗ
messageReceived(channel, msg) {
console.log('got message')
}
рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкрдврд╝реЗрдВ
cur = conn.cursor ()
name = 'name' * 1000000
cur.execute ("INSERT INTO рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдирд╛рдо) VALUES (% s)", (рдирд╛рдо,)
con.commit ()
@fracek рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдореБрджреНрджреЗ рджреЗ рд░рд╣рд╛ рдерд╛ред
рдЬрдм рдореИрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЪреЗрдХ рдХрд░рдиреЗ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдПрдХ рд╣реА рд▓реЗрди-рджреЗрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ 'name' * 1000000
(4MB) рдХреЗ рд╕рд╛рде, 100 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╕рдореНрдорд┐рд▓рд┐рдд рдХреАрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЪрд▓ рд░рд╣реА рдереА, рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЕрдВрддрд░рд╛рд▓ рдХреА рдЬрд╛рдБрдЪ рдХреА (рд▓рдЧрднрдЧ 5.3 рдПрдордмреА рдкрд░ рд╕реНрдерд┐рд░ рд░рд╣рд╛):
рдФрд░ рдлреНрд▓рд╢ рд▓реИрдЧ:
_ рдпрд╣ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрд▓ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдбреАрдмреА рдЙрджрд╛рд╣рд░рдг рдкрд░ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрд╛ рдерд╛ред рдЙрдирдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдЕрдВрддрд░рд╛рд▓ рдЪрдврд╝ рдЬрд╛рдПрдЧреА рдФрд░ рдлрд┐рд░ рдПрдХ рдЕрдВрддрд░рд╛рд▓ (12 рдПрдордмреА, 16 рдПрдордмреА, 20 рдПрдордмреА, рдЖрджрд┐) рдкрд░ рд╕реНрдерд┐рд░ рд░рд╣реЗрдЧреА рдФрд░ 3-5 рдорд┐рдирдЯ рдХреЗ рдмреАрдЪ рдХрд╣реАрдВ рднреА рдлреНрд▓рд╢ рд▓реЗрдЧ рд╣реЛрдЧреАред
рдХрд╛рдлреА рджреЗрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдореИрд╕реЗрдЬ рдорд┐рд▓реЗред рд╣рд░ рдПрдХ рдореЗрдВ 'name' * 1000000
(4MB) рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рднреА рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдХрд┐ 4 рдПрдордмреА рдореВрд▓реНрдп (~ 90 рд╕реЗрдХрдВрдб) рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ 100 рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐ рдиреЗ рдХрд┐рддрдирд╛ рд╕рдордп (~ 30 рдорд┐рдирдЯ) рд▓рд┐рдпрд╛ред
рдореБрдЭреЗ рдлреАрдирд┐рдХреНрд╕ рдЪреИрдирд▓ рд╕реЗ рдбрд┐рд╕рдХрдиреЗрдХреНрдЯреЗрдб рдЗрд╢реНрдпреВ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ
- рдлреАрдирд┐рдХреНрд╕ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдпрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 60 рдХреЗ рджрд╢рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
- рдпрджрд┐ рдХрд┐рд╕реА рдПрдХрд▓ рд╕рдВрджреЗрд╢ рдХреЛ рднреЗрдЬрдиреЗ рдореЗрдВ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдлрд╝реАрдирд┐рдХреНрд╕ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдк рдЬрдореА рд╣реБрдИ рд╣реИ рдпрд╛ рдЕрднрд┐рднреВрдд рд╣реИ рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕реЗ рдорд╛рд░рддрд╛ рд╣реИред
рдФрд░ рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, sasajuric
рдиреЗ рдирд┐рдореНрди рд╕рдорд╛рдзрд╛рди рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
- рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЗ рдмрд╛рд╣рд░ рдкреЗрд▓реЛрдб рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд / рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдирд╛
- рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдХреНрд░рдордмрджреНрдз / рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрджрд╛рд╕реАрди рдХрд░рдирд╛: erlang.term_to_binary рдФрд░: erlang.binary_to_term
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХреБрдЫ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдФрд░ рднрд╛рд░реА рдкреЗрд▓реЛрдб рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рдмрд┐рд▓реНрдЯ-рдЗрди рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ Phoenix.Socket.V2.JSONSerializer
( рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо V1
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ sasajuric
рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рдПред
рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: # 120
рд╣рд╛рдБ, рдЕрдЧрд░ realtime
рд╕рд░реНрд╡рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд╕реНрдерд╛рдпреА рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ (рдпрджрд┐ рдХрднреА рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП :undefined.handle_message/4
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд░рд╛рдЬреНрдпред
рдпрд╣ рд╕рд┐рд░реНрдл рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХреЗ рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ ( @kiwicopple рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдХрд╣реАрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ)ред # 120 рдХреЛ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬрд▓реНрдж рд╣реА рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рдирд┐рдЧрд░рд╛рдиреА рдЬрд╛рд░реА рд░рдЦрдиреА рд╣реЛрдЧреАред
@ abc3 : btw, рд░реВрдЯрд┐рдВрдЧ рдЯрд╛рдЗрдо # 118 рдХреЗ рдЪрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛
рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдпреЛрдЧрджрд╛рди рдорджрджрдЧрд╛рд░ рд╣реИ: рдмреНрд▓рд╢:
рдХреГрдкрдпрд╛, рдЕрдкрдирд╛ рдирд┐рдЧрд░рд╛рдиреА рдкрд░рд┐рдгрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдпрджрд┐ рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдареЗрд╕ рдкрд░ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдкреБрд░рд╛рдирд╛ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕рдордп рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реИ https://github.com/supabase/realtime/issues/8#issuecomment -564551365
https://github.com/supabase/realtime/blob/af6344c7746e8a8af6a11a9b498721c1f97e339b/server/lib/realtime_web/channels/realtime_channel.ex#L21 -L24 -L24
рддреЛ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Realtime.SubscribersNotification.notify_subscribers
рд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреА рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рднреЗрдЬреЗрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм users
рдЧреНрд░рд╛рд╣рдХ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде this.addChannel('realtime:*')
рдФрд░ this.addChannel('realtime:public:users')
рд╕рджрд╕реНрдпрддрд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ 4 рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред
рдпрджрд┐ рдПрдХ рд╕рдВрджреЗрд╢ 4MB, рд╕рд░реНрд╡рд░ 16MB рднреЗрдЬ рджреЗрдЧрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╛ рд▓рд┐рдпрд╛ рд╣реИ!
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдбрд┐рдмрдЧ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛:
рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреБрдЫ рд╕реЗрдХрдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИрдВ:
https://github.com/supabase/realtime/blob/894f4bb89230174677878803711d8adbef8c090fe/server/lib/realtime/replication/ex#L72 -L73