arch-pg.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:4k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. <Chapter Id="arch-pg">
  2. <TITLE>Architecture</TITLE>
  3. <Sect1>
  4. <Title><ProductName>Postgres</ProductName> Architectural Concepts</Title>
  5. <Para>
  6.      Before we continue, you  should  understand  the  basic
  7.      <ProductName>Postgres</ProductName>  system  architecture.   Understanding how the
  8.      parts of <ProductName>Postgres</ProductName> interact will make the  next  chapter
  9.      somewhat clearer.
  10.      In  database  jargon,  <ProductName>Postgres</ProductName> uses a simple "process  
  11.      per-user" client/server model.  A <ProductName>Postgres</ProductName> session 
  12.      consists of the following cooperating UNIX processes (programs):
  13. <ItemizedList>
  14. <ListItem>
  15. <Para>
  16.        A supervisory daemon process (<Application>postmaster</Application>),
  17. </Para>
  18. </ListItem>
  19. <ListItem>
  20. <Para>
  21.        the user's frontend application (e.g., the <Application>psql</Application> program), and
  22. </Para>
  23. </ListItem>
  24. <ListItem>
  25. <Para>
  26.        the  one or more backend database servers (the <Application>postgres</Application> process itself).
  27. </Para>
  28. </ListItem>
  29. </ItemizedList>
  30. </para>
  31. <Para>
  32.      A single  <Application>postmaster</Application>  manages  a  given  collection  of
  33.      databases  on  a  single  host.   Such  a collection of
  34.      databases is called an installation or site.   Frontend
  35.      applications  that  wish  to  access  a  given database
  36.      within an installation make calls to the   library.
  37.      The library sends user requests over the network to the
  38.      <Application>postmaster</Application>
  39. (<XRef LinkEnd="PGARCH-CONNECTIONS" EndTerm="PGARCH-CONNECTIONS">(a)), 
  40. which in turn  starts  a  new backend  server  process 
  41. (<XRef LinkEnd="PGARCH-CONNECTIONS" EndTerm="PGARCH-CONNECTIONS">(b)) 
  42.      
  43. <Figure Id="PGARCH-CONNECTIONS">
  44. <Title>How a connection is established</Title>
  45. <Graphic Align="center" FileRef="connections.gif" Format="GIF"></Graphic>
  46. </Figure>
  47.      and connects the frontend process to the new server 
  48. (<XRef LinkEnd="PGARCH-CONNECTIONS" EndTerm="PGARCH-CONNECTIONS">(c)).
  49. From that  point  on,  the  frontend process and the backend
  50.      server communicate without intervention by the 
  51.      <Application>postmaster</Application>.   Hence, the <Application>postmaster</Application> is always running, waiting
  52.      for requests, whereas frontend  and  backend  processes
  53.      come  and  go.  The <FileName>libpq</FileName> library allows a single 
  54.      frontend to make multiple connections to backend processes.
  55.      However,  the  frontend  application is still a 
  56.      single-threaded process.  Multithreaded frontend/backend  
  57.      connections are not currently supported in <FileName>libpq</FileName>.
  58.      One  implication of this architecture is that the 
  59.      <Application>postmaster</Application> and the backend always run on the  same  
  60.      machine (the  database  server), while the frontend 
  61.      application may run  anywhere.   You  should  keep  this  
  62.      in  mind,
  63.      because  the  files  that  can  be accessed on a client
  64.      machine may not be accessible (or may only be  accessed
  65.      using  a  different  filename)  on  the database server
  66.      machine.
  67.      You should also be aware that the <Application>postmaster</Application> and  
  68.      postgres  servers  run  with  the  user-id  of the <ProductName>Postgres</ProductName>
  69.      "superuser."  
  70. Note that the <ProductName>Postgres</ProductName> superuser does not
  71. have  to  be  a special user (e.g., a user named 
  72. "postgres"), although many systems are installed that way.
  73. Furthermore,  the  <ProductName>Postgres</ProductName>  superuser should
  74.      definitely  not  be the UNIX superuser, "root"!  In any
  75.      case, all files relating to a database should belong to
  76.      this <ProductName>Postgres</ProductName> superuser.
  77. </Para>
  78. </sect1>
  79. </Chapter>