在Drupal中组合数据库

时间:2010-12-16 20:50:06

标签: drupal

所以这是场景:

我正在构建一系列需要在同一服务器上单独安装Drupal-6的事件网站。每个都使用相同的架构,但使用不同的URL和主题。

我希望这些网站能够分享2种内容类型,教师和赞助商的内容。因此,将有一个数据库,其中包含所有教师和赞助商,每个单独的事件站点可以通过节点队列来获取。

这样就可以在任何Drupal安装中创建和编辑新的教师节点和赞助者节点。

共享用户表也很方便,但并非绝对必要。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

this会帮助你吗?

  

settings.txt中的注释说明   如何使用$ db_prefix共享表:

 * To provide prefixes for specific tables, set $db_prefix as an array.
 * The array's keys are the table names and the values are the prefixes.
 * The 'default' element holds the prefix for any tables not specified
 * elsewhere in the array. Example:
 *
 *   $db_prefix = array(
 *     'default'   => 'main_',
 *     'users'     => 'shared_',
 *     'sessions'  => 'shared_',
 *     'role'      => 'shared_',
 *     'authmap'   => 'shared_',
 *   );

另一种方式,虽然我不知道这是否有用,但是每个Drupal安装创建一个数据库并在每个数据库中创建一个VIEW,例如。 install1_users,install2_users,指共享数据库中的一个共享表shared_users。精心构造的视图应该像普通表一样updatable

答案 1 :(得分:2)

听起来像Domain Access项目的工作,这是一套模块,提供从一个Drupal安装和一个共享数据库运行一组附属站点的工具。该模块允许您跨多个站点共享用户,内容和配置。默认情况下,这些站点共享Drupal安装中的所有表,但Domain Prefix模块允许高级用户选择性的动态表前缀。

恕我直言,这比滚动自定义解决方案要好得多,后者会带来相当大的复杂性和无法升级网站的风险。请参阅Share tables across instances (not recommended)

答案 2 :(得分:1)

有几种方法可以做到这一点。

如果可以共享单个数据库,则可以使用前缀如下:

$db_prefix = array(
  'default'   => 'main_',
  'users'     => 'shared_',
  'sessions'  => 'shared_',
  'role'      => 'shared_',
  'authmap'   => 'shared_',
);

但是,请记住,MySQL数据库可以容纳的表数有一个硬限制。根据这个thread, it's 1792。如果您怀疑自己将达到此限制,则可以使用此黑客/错误。

$db_prefix = array(
  'default'   => '',
  'users'     => 'maindb.',
  'sessions'  => 'maindb.',
  'role'      => 'maindb.',
  'authmap'   => 'maindb.',
);

其中maindb是另一个包含所需数据的共享数据库。这不是最佳实践,但它适用于Drupal 6(未在D7中测试过)。