Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序的成本有多高?>;数据库呼叫?(即Java JDBC->;Oracle)?_Java_Database_Oracle - Fatal编程技术网

应用程序的成本有多高?>;数据库呼叫?(即Java JDBC->;Oracle)?

应用程序的成本有多高?>;数据库呼叫?(即Java JDBC->;Oracle)?,java,database,oracle,Java,Database,Oracle,在我的工作场所中,总是有一个“在应用程序服务层中执行所有操作”与“在数据库过程中执行所有操作”的参数 我得到的是,让应用服务器和数据库过于频繁地通信是一项相当昂贵的操作。我的问题是——到底有多贵 假设我们有这个例子——我的Java应用程序中有一个用户列表,我需要为每个用户绑定一个特定的属性。假设有20个用户和20个属性要存储。使用参数(employee_id、attribute_value)对Oracle过程进行20次调用,而不是一次调用并同时发送所有employee_id及其匹配的attrib

在我的工作场所中,总是有一个“在应用程序服务层中执行所有操作”与“在数据库过程中执行所有操作”的参数

我得到的是,让应用服务器和数据库过于频繁地通信是一项相当昂贵的操作。我的问题是——到底有多贵

假设我们有这个例子——我的Java应用程序中有一个用户列表,我需要为每个用户绑定一个特定的属性。假设有20个用户和20个属性要存储。使用参数(employee_id、attribute_value)对Oracle过程进行20次调用,而不是一次调用并同时发送所有employee_id及其匹配的attribute_值,成本会高多少

编辑:

好吧,也许我没有把我的情况说清楚——我会把它“哑巴化”一点:)


对执行1次插入的Oracle过程进行n次调用比对执行n次插入的Oracle过程进行1次调用(其中n次插入基本上循环1次插入n次)要贵多少?在n次调用中而不是在1次调用中执行此操作的原因是,对于新手来说,用Java编写一个循环显然更容易,该循环使用简单数据类型作为输入对象(例如integer、varchar2等)执行n次过程调用而不是想办法将数组从Java传递到Oracle。

您需要逐个查看获取数据的成本。取决于您遵守的SLA。 在您所举的示例中,如果不是所有用户都同时登录到您的应用程序,并且“属性”对每个用户都有不同的值,那么一次获取所有用户是没有意义的。 但是,如果上面的某些属性表示静态数据,那么将它们缓存在应用程序中并使用缓存的数据是有意义的

你真的需要逐案做出决定。仅仅因为获取数据很昂贵并不意味着你可以一次性获取所有数据

至于它的成本有多高,如果您使用的是数据源和连接池(现在几乎所有的APS都使用),如果您在过程中使用prepared语句、BULK COLLECT语句,或者如果您使用的是hibernate(使用最佳获取大小),那么成本应该不会太高。
这种关系绝对不是线性的,即一次通话不会花费您20倍的费用。

您是否对其进行了基准测试或测量?这可能在很大程度上取决于您的特定系统(例如,数据库服务器是否与应用程序位于同一台机器上)!嗯,没有。我们正在测量HTTP响应持续时间,但除此之外,我认为我们没有任何统计数据。此外,我们正在Tomcat5.5上运行一个基于Spring的JavaWeb应用程序,使用OracleJDBC驱动程序连接到Oracle10DB。不幸的是,除了app和DB在不同的机器上这一事实之外,我不知道还有多少其他技术方面会有很大帮助。