小编Kee*_*ers的帖子

高流量网站上的Solr安全数据导入和核心交换

你好技术人员,

假设我们有一个(PHP)网站,每月有数百万访问者,我们在网站上运行SolR索引,托管了400万个文档.Solr在4个独立的服务器上运行,其中一个服务器是主服务器,另外三个服务器是复制的.

可以被插入数以千计的文件到Solr中每5分钟.除此之外,用户还可以更新他们的帐户,这也应该触发solr更新.

我正在寻找一种安全的策略来快速安全地重建索引,而不会丢失任何文档.并有一个安全的增量/更新策略.我已经考虑过一个策略,我想与专家分享这些策略以听取他们的意见,以及我是否应该采用这种方法,或者他们是否可以提出一些(完全)不同的建议.

Solr DataImport

对于所有操作,我想使用一个数据导入处理程序.我想将数据和delta导入混合到一个配置文件中,如DataImportHandlerDeltaQueryViaFullImport.我们使用MySQL数据库作为数据源.

重建指数

为了重建索引,我有以下几点; 我们在'live'核心附近创建了一个名为'reindex'的新核心.使用dataimporthandler,我们完全重建整个文档集(400万个文档),总共需要1-2个小时.在实时索引上,仍然每分钟都有一些更新,插入和删除.

重建后大约需要1-2个小时,新指数仍然不再是最新的.为了缩短延迟,我们对新核心进行一次'delta'导入,以提交过去1-2小时内的所有更改.完成后进行核心交换.每分钟运行一次的正常"delta"导入处理程序将选择这个新核心.

提交对活核心的更新

为了保持我们的实时核心,我们每分钟都会运行delta导入.由于核心交换,reindex核心(现在是活核心)将被跟踪并保持最新状态.我猜这个索引延迟几分钟不应该是一个问题,因为dataimport.properties也会被交换掉?delta-import已超过这些延迟时间,但应该是可能的.

我希望你了解我的情况和我的策略,并建议我是否以正确的方式在你眼中做到这一点.另外我想知道是否有任何瓶颈我没有想到?我们正在运行Solr 1.4版.

我有一些问题,复制怎么样?如果主服务器交换核心,那么如何处理这个?

在交换时丢失文件有什么风险吗?

提前致谢!

architecture solr high-availability high-traffic dataimporthandler

9
推荐指数
1
解决办法
3424
查看次数

Doctrine 2.1在preUpdate lifeCycleCallback中持久化实体

我正在努力解决以下问题,在实体类中我有一个preUpdate lifeCycleCallback,它必须在刷新auditTrail的更改之前保留一个新实体.

在preRemove和prePersist中,这可以很好地工作,但在preUpdate中没有任何事情发生.如果我自己调用flush,它会进入递归循环.

根据教学用户的谷歌组织将其放入onFlush应该是一个选项,但在那种情况下我无法访问实体的旧值以将此旧值保存在audittrail的新其他实体中.

我想要存档的一些小例子:

<?php
/**
 * @Entity
 * @HasLifeCycleCallbacks
 */
class someEntity {
    ... annotations ...


    /**
     * @PreUpdate
     */
    public function addAuditTrail() {
        $em = \Zend_Registry::get('doctrine')->getEntityManager();

        $entity = new AuditTrail();
        $entity->action = 'update';
        $entity->someField = $this->someField;

        $em->persist($entity); //this just doesn't do anything :-(
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

这不是真正的代码,只是为了说明你想要的东西.我也尝试过这样的事情:

$em->getUnitOfWork()->computeChangeSet($em->getClassMetaData(get_class($entity)), $entity);
Run Code Online (Sandbox Code Playgroud)

哪个应该根据此主题工作:http://groups.google.com/group/doctrine-user/browse_thread/thread/bd9195f04857dcd4

如果我再次调用flush,但由于某些无限循环而导致Apache崩溃.

谁有想法给我?谢谢!

orm doctrine-orm

8
推荐指数
1
解决办法
5729
查看次数

如何在php中生成唯一的会话ID

在我们的网站上,我们希望能够在多个域中共享会话.所有这些网站都在同一台服务器上,但其中一些网站有不同的IP地址.

我找到的可能解决方案是自己设置会话ID:

<?php
session_id($someUniqueHash);
?>
Run Code Online (Sandbox Code Playgroud)

如果我像md5('test')那样制作哈希,这就有效.在同一服务器上的另一个域上,我们再次进行会话.

问题是生成ID.我在互联网上看到一些使用microtime等的解决方案,但是当我使用这种方法时,我无法预测其他域/ PHP页面上的会话ID.

有没有人有想法?或者我们不应该实现这个?是否有其他选项可以在多个域上共享会话?(不是子域名!)

php session sessionid

7
推荐指数
1
解决办法
1万
查看次数

SonarQube 无法启动

我正在运行 Ubuntu 服务器并尝试安装 SonarQube。问题是我在错误日志中没有得到任何有用的消息。

它托管在 Ubuntu Server 14.04 上

我基本上遵循了本教程。MySQL 已经安装好了,我暂时跳过了 Nginx。

日志:

--> Wrapper Started as Daemon
Launching a JVM...
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
  Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.

2017.06.16 08:29:43 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonar/temp
2017.06.16 08:29:43 TRACE app[][o.s.a.NodeLifecycle] tryToMoveTo from INIT to STARTING => true
2017.06.16 08:29:43 TRACE app[][o.s.a.p.Lifecycle] tryToMoveTo es from INIT to STARTING => true
2017.06.16 08:29:43 INFO  app[][o.s.a.p.JavaProcessLauncherImpl] Launch process[es]: /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Xmx1G -Xms1G -Xss256k -Djna.nosys=true …
Run Code Online (Sandbox Code Playgroud)

java jvm sonarqube

1
推荐指数
1
解决办法
4307
查看次数