我正在考虑将应用程序从Oracle转换为具有数据库中所有业务逻辑的Postrges。目前有一个非常大的包,有大约200个公共常量变量。 Postgres不支持包级变量,所以我在讨论如何转换它。我看到两种可能性,但需要一些关于哪种更好的看法(它们看起来都很讨厌):
有什么想法吗?
答案 0 :(得分:1)
我选择1,应该很容易编写一个脚本来自动为你执行此操作,然后保持包尽可能接近其原始定义。
答案 1 :(得分:1)
我会混合两种选择。选项将保存在表格中:
create table package_options ( option_name text, option_value text )
为了便于添加新选项或修改并由函数返回以便于查询使用
create function get_option(text) returns text as
$$ select option_value from package_options where option_name=$1 $$
language sql stable;
可能还有get_int_option(text)
,将值转换为int等。
您还可以添加option_type
列和一些约束,以检查类型有效性。
答案 2 :(得分:1)
我正在采用性能方法和接口方法,因为你的问题就出现了。
根据您使用选项2的数据库使用情况,可能会导致数据库中出现热点。这是一个更极端的场景 - 假设你有5000个用户登录系统,这反过来会导致你的代码被激活,而这反过来又选择了你的package_options表。在任何特定时刻,您可能有数千名用户访问该表。
这可能是一个问题,它可能不会PG很好地处理并发性,所以只有测试才能证明什么。您必须对其进行测试才能确定,但在考虑这种方法时需要牢记这一点。我还会测试你的选项1场景,看看除了作为一个简单的管理和使用界面之外,哪个表现更好。考虑到所需的测试相对简单,为什么不对它进行测试,这样你就不会因为使用场景选择不好而陷入困境。