我们正在开发一些将使用 Oracle 11g 数据库部署在 Liferay 6.2.x 上的portlet。
我们已经实现了一些调用Liferay创建用户服务的服务。
据我所知,我们的Liferay不会使用Oracle序列进行主键生成(并使用select max(id)+1 from table
策略),这对于非常大的用户群来说非常慢(我们有10M +用户) ,这些服务可以批量创建数百万用户。
有没有办法让liferay在内部实体内部使用oracle序列'主键生成?
答案 0 :(得分:1)
首先:您是否测量过(并且您能确认)这是否缓慢?你问问题的方式听起来就像你只是假设这是你的瓶颈。
下一步:Liferay的计数器生成不应该每个创建的对象都有一个新的选择(为了生成新的ID。如果你看一下portal.properties,你可以在portal-ext.properties中覆盖,你会找到这个部分:
##
## Counter
##
#
# The counter operates with its own data source to prevent deadlocks. By
# default, the data source created for the counter uses the same settings as
# those used to create the data source used for the rest of the portal. That
# happens because the counter service will look up the properties prefixed
# with "jdbc.default." to create its data source. See the JDBC properties
# prefixed with "jdbc.default." for more information.
#
# Setting a different value for the counter JDBC prefix allows you to better
# fine tune the counter data source with its own set of configuration
# settings for high availability installations. Note that these settings,
# though separate, are a copy of the default settings with the newly
# overridden values.
#
counter.jdbc.prefix=jdbc.default.
#
# Set the number of increments between database updates to the Counter
# table. Set this value to a higher number for better performance.
#
counter.increment=100
#
# You can further fine tune the counter increment for specific counter
# names. This entry will ensure that the counter name
# "com.liferay.portal.model.Layout" or anything that starts with
# "com.liferay.portal.model.Layout#" will only increment by 1.
#
counter.increment.com.liferay.portal.model.Layout=1
当您查看Liferay的user creation时,您会发现ID生成由CounterLocalService完成。您可以查看该实现,但我的建议是不要更改此类中央服务。但是,您的里程可能会有所不同。
恕我直言,你应该描述你的用户创建,并检查你的实际瓶颈是什么并修复它。它可能是事务的数量,也可能是此操作期间发生的其他事情(例如,选择角色,组等)。
另请注意,Liferay可以按需用户导入操作,例如:这是LDAP接口的一种操作模式:您只需连接到LDAP而无需任何实际的用户导入。用户将在他们登录的那一刻导入。如果您有数百万用户,他们可能无法同时登录,因此您将自动分摊负载。如果你实现像LDAP这样的东西,或者实际上只是将你的用户加载到LDAP服务器是你的决定。
答案 1 :(得分:0)
我有类似的要求:
我有一个liferay实体(日志表),它有一个由Liferay自动生成的主键。
但是现在外部应用程序需要在同一个db表中添加条目。
看看这个要求我只看到两个选项: