NSQL.js рдореЗрдВ MySQL рдХрд╛ рд╕рдорд░реНрдерди: рдиреЛрдб- mysql-libmysqlclient

рдореИрдВ рдЗрд╕ рдШреЛрд╖рдгрд╛ рдХреЛ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдЯрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред



рдорд┐рд▓рддреЗ рд╣реИрдВ: рдиреЛрдб- mysql-libmysqlclient v0.0.7 , Node.js рдХреЗ рд▓рд┐рдП MySQL рдХрдиреЗрдХреНрдЯрд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдФрд░ PHP / рдкрд░реНрд▓ / рд░реВрдмреА рдЖрджрд┐ рдЬреИрд╕реЗ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рдХрд░реАрдм рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред



MySQL рдФрд░ Node.js: рд╕рдВрдмрдВрдз рдЗрддрд┐рд╣рд╛рд╕



Node.JS рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рддреЗрдЬ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рд░реНрд╡рд░ ([1] рджреЗрдЦреЗрдВ) рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЛрдВ рдХреА рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реМрдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, NoSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ Memcached рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрдЯрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЙрд╕ рд╕реНрддрд░ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдбреЗрдореЙрди рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ Node.js рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣ Node.js рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдо рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░ Node.js рджреНрд╡рд╛рд░рд╛ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдмрд╛рдж рдХреЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдФрд░ рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдиреЗрдХреНрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ рд╣реИрдВред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдиреЛрдб- mysql-libmysqlclient рдореЗрдВ рдХрдИ рдереЗ:

рдЕрднреА рддрдХ Node.js рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ MySQL рдХрдиреЗрдХреНрдЯрд░?



рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЙрди рд╕рднреА рдореЗрдВ рдЕрдкрдиреА рдХрдорд┐рдпрд╛рдВ рдереАрдВред рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдпрд╣ рд╕реАрдзреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреЛрдб- mysql рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреЛрдб рдХреА рдПрдХ рдХрд╛рдлреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╣реИ рдЬрд┐рд╕реЗ Node.js API рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рдФрд░ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╕реА / рд╕реА ++ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 3-5 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред рдиреЛрдб.dbslayer.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ DBsLayer рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкрд░рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ Node_postgres рдмрд╣реБрдд рдХрдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдерд╛ред рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрдиреЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рд▓реЛрдЧреЛрдВ рдХреЗ рдХрд░реАрдм рдирд╣реАрдВ рдЖрдпрд╛ред рдпрд╣реА рдореБрдЦреНрдп рдХрд╛рд░рдг рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдиреЛрдб-рдорд╛рдЗрд╕реНрдХрд▓-рд▓рд┐рдмрдорд┐рд╕рдХреНрд▓реЗрдХреНрд▓рд┐рдВрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред



рдиреЛрдб-рдорд╛рдпрд╕реНрдХрд┐рд▓-рд▓рд┐рдмрдорд┐рд╕рдХреНрд▓реЗрдХрд┐рдПрдВрдЯ: рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ



рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпреЛрдВ, рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА libmysqlclient API рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдХрдиреЗрдХреНрдЯрд░ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:



/* http://gist.github.com/537870 */ var mysql_libmysqlclient = require("mysql-libmysqlclient"); var conn = mysql_libmysqlclient.createConnection(host, user, password, database); if (!conn.connected()) { sys.puts("Connection error: " + conn.connectErrno() + ", " + conn.connectError()); process.exit(1); } var string = conn.escape("Sannis's code"); /* Sync queries */ var res = conn.query("CREATE TEMPORARY TABLE t1 (alpha INTEGER, beta VARCHAR(255), pi FLOAT);"); sys.puts("'CREATE TABLE' result: " + sys.inspect(res)); res = conn.query("INSERT INTO t1 VALUES (1, 'hello', 3.141);"); sys.puts("LastInsertId: " + sys.inspect(conn.lastInsertId())); /* Async queries */ conn.queryAsync("INSERT INTO t1 VALUES (2, 'world', 2.718);", function (res) { conn.queryAsync("SELECT * FROM t1;", function (res) { sys.puts("NumRows: " + res.numRows()); var rows = res.fetchAll(); sys.puts("Rows: " + sys.inspect(rows)); conn.queryAsync("DELETE * FROM t1;"); }); });
      
      







рддрддреНрдХрд╛рд▓ рдпреЛрдЬрдирд╛

рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


Libmysqlclient рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред Mysql_use_result () рдпрд╛ mysql_store_result () рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рднреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ mysql_query () рдкрд░ рджреВрд╕рд░реА рдХреЙрд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ mysql_send_query рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдорд╛рдИрдПрд╕рдХреНрдпреВрдПрд▓ 2 рдХрдиреЗрдХреНрдЯрд░ рд░реВрдмреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрд╕ рдорд╛рд░реНрдЧ рдкрд░ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Node.js рдореЗрдВ libeio рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдбрд┐рд╕реНрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ eio_custom рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓рд┐рдмреЗрд░рд┐рдпреЛ рдореЗрдВ, рдпрд╣ рдереНрд░реЗрдбреНрд╕-рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ mysql_query рдЪрд▓рд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реБрдЖ рд╣реИред



рд╢рд╛рдпрдж рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╡реЗрдВрдЯ-рд▓реВрдк рдпрд╛ рд▓рд┐рдмрд╛рдпреЛ рдереНрд░реЗрдб-рдкреВрд▓ рдкрд░ рдПрдХ рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдиреБрд░реЛрдз рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реМрдЯ рдЖрдПрдВрдЧреЗ, рдЬрдм рдХрддрд╛рд░ mysql_query рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧреА рдФрд░ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред



рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ: github.com/Sannis/node-mysql-libmysqlclient/blob/v0.0.7/src/mysql_bindy_connection.cc#L825-946



рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ


[рез] рд╡реЗрдмрд╕рд╛рдЗрдЯ Node.js

[реи] рдЧрд┐рдЯрд╣рдм рдкрд░ рдиреЛрдб.рдЬреЗрдПрд╕

[рей] рдЧрд┐рдбрд╣рдм рдкрд░ рдиреЛрдб-рдорд╛рдпрд╕реНрдХрд▓-рд▓рд┐рдмрдорд┐рд╕рдХреНрд▓реЗрдХреЗрдВрдЯ

[рек] рдиреЛрдб-рдорд╛рдпрд╕реНрдХрд┐рд▓-рд▓рд┐рдмрдорд┐рд╕рдХреНрд▓реЗрдХрд┐рдПрдВрдЯ рдПрдкреАрдЖрдИ



PS рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рд╖рдпрдЧрдд рдмреНрд▓реЙрдЧ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╖рдп рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд░реНрдо рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ ?



All Articles