我对我的应用程序的最佳解决方案有点困惑.正如我目前所见,我必须在neo4j独立(RestGraphDatabase)和EmbeddedGraphDatabase之间进行选择(RemoteGraphDatabase尚未用于生产用途).
优点REST:
- >不同的服务可以访问neo4j DB(示例:我有一个服务负责A,B和C类节点.第二个服务负责节点D和H,可以将D节点连接到A节点) .通过这种方式,我有干净的域结构.每个服务仅负责其自己的域节点.我可以更新每个服务,而不必关闭我的整个应用程序.
- >我可以从不同的语言访问neo4j数据库(PHP)
缺点: - 性能不如EmbeddedGraphDatabase好(因为neo4j服务器和服务在同一台机器上,延迟不是那么大). - 没有交易
我的问题:这是一个与独立服务器一起使用的好决定吗?或者我应该使用嵌入式服务并将服务混合成一个大的服务?是否可以在没有事务支持的情况下运行大型(复杂)应用程序?
如何通过REST获取当前运行的neo4j-server版本(或通常的服务器信息)?是否有任何"/ status"URI或类似的东西?
我有这样的课:
trait ThirdParty { def invoke = println("right") }
trait WeatherIcon { def invoke = println("wrong") }
class MyClass {
object objA extends ThirdParty
object objB extends WeatherIcon
}
Run Code Online (Sandbox Code Playgroud)
如何使用Scala反射API迭代包含的对象并调用方法(如果它是ThirdParty类的实例)?
我有4个模块SBT项目:module-a,module-b,module-c,module-d.
每个模块都可以打包为WAR.我想在Jenkins上设置一个部署,它只构建4个模块中的一个并将其部署到容器中.
详细地说,我想有4个詹金斯工作- ,job-a,job-b,job-c,job-d每个建筑物仅定义模块(a至d).
目前,我正在使用clean update test packageJenkins sbt构建的命令,但这会导致打包所有4个不必要的模块.
我已经尝试project -module-a clean update test package但没有运气.
我是JSF和PrettyFaces的新手.所以到现在为止我发现我可以配置PrettyFaces将请求"转发"到正确的.xhtml文件.问题是,我(或用户,如果他知道我的文件夹结构)也可以请求该文件.这是我的样本:
文件:webbapp/mypage.xhtml
我在pretty-config.xml中添加了以下行:
<url-mapping id="myPageId">
<pattern value="/prettyurltomypage" />
<view-id value="/mypage.xhtml" />
</url-mapping>
Run Code Online (Sandbox Code Playgroud)
PrettyFaces过滤器配置为拦截"/ ".Faces Front Controller配置为处理所有" .xhtml"请求.当我要求......
http://localhost:8080/myapp/prettyurltomypage
Run Code Online (Sandbox Code Playgroud)
......一切都很好.我的问题是,我也可以要求......
http://localhost:8080/myapp/mypage.xhtml
Run Code Online (Sandbox Code Playgroud)
我如何限制.xhtml请求?我的目标是让jsf/server提供默认的404页面.
我的解决方案(到目前为止)是在pretty-config.xml中定义重写规则:
<rewrite match="/mypage.xhtml" substitute="/prettyurltomypage" redirect="301" />
Run Code Online (Sandbox Code Playgroud)
还有其他(更智能)的方式吗?
我试图在scala中使用specs2测试一些db相关的东西.目标是测试"db running"然后执行测试.我发现如果数据库关闭,我可以使用Matcher类中的orSkip.
问题是,我正在获得一个匹配条件的输出(作为PASSED)并且示例被标记为SKIPPED.我想要的是:只有在测试数据库脱机时才执行一个标记为"SKIPPED"的测试.这是我的"TestKit"的代码
package net.mycode.testkit
import org.specs2.mutable._
import net.mycode.{DB}
trait MyTestKit {
this: SpecificationWithJUnit =>
def debug = false
// Before example
step {
// Do something before
}
// Skip the example if DB is offline
def checkDbIsRunning = DB.isRunning() must be_==(true).orSkip
// After example
step {
// Do something after spec
}
}
Run Code Online (Sandbox Code Playgroud)
这里是我的规范的代码:
package net.mycode
import org.specs2.mutable._
import net.mycode.testkit.{TestKit}
import org.junit.runner.RunWith
import org.specs2.runner.JUnitRunner
@RunWith(classOf[JUnitRunner])
class MyClassSpec extends SpecificationWithJUnit with TestKit with Logging {
"MyClass" should {
"do …Run Code Online (Sandbox Code Playgroud) 我正在寻找处理数据的最佳实践。所以,这就是我到目前为止所得到的:1.000.000 个“A”类型的节点。每个“A”节点可以连接1-1000个“B”型节点和1-10个“C”型节点。
我编写了一个 RESTful 服务(Java、Jersey)来将数据导入到 neo4j 图中。在导入节点“A”(只有节点,有 ID,没有更多数据)后,我注意到 neo4j db 已经增长到 ~2.4GB。
在 neo4j 中存储附加字段(名称、描述等)是个好主意吗?或者我应该设置一个 mongoDB/hadoop 来使用键/值组合进行数据访问?
我正在使用neo4j-rest-graphdb,只是尝试使用Cypher来获取简单的Node结果.
CypherParser parser = new CypherParser();
ExecutionEngine engine = new ExecutionEngine(graphDbService);
Query query = parser.parse( "START referenceNode = node (0) " +
"MATCH referenceNode-[PRODUCTS_REFERENCE]->products-[PRODUCT]->product " +
"RETURN product.productName " +
"ORDER BY product.productId " +
"SKIP 20"
"LIMIT 10");
ExecutionResult result = engine.execute( query );
Iterator<Map<String, Object>> iterator = result.javaIterator();
Run Code Online (Sandbox Code Playgroud)
迭代结果的最佳做法是什么?最后一行导致我的服务挂起约6秒.在最后没有迭代器的情况下,应用程序很快就会安静.我也试过了webadmin cypher终端,结果是在50ms内获取的.难道我做错了什么?
neo4j ×4
rest ×3
scala ×2
cypher ×1
hadoop ×1
jenkins ×1
jsf ×1
mongodb ×1
prettyfaces ×1
reflection ×1
restriction ×1
sbt ×1
skip ×1
specs2 ×1