我正在为Oracle NoSQL数据库提出Python适配器的建议。 Oracle NoSQL数据库作为独立的Java应用程序运行,至少在Java程序中,通过告诉程序要连接的主机名和端口以及一些配置设置来与它进行交互。然后从包含该配置的“kvstore”对象中进行java调用。
我想创建一个Python库,它基本上暴露了Oracle NoSQL所拥有的Java方法的Python版本,并将这些版本转换为Java以与正在运行的Oracle NoSQL应用程序对话,但我不确定哪种技术最好能够做到这一点。
有谁知道我想要使用什么技术?我宁愿不使用Jython(因此应用程序可以在标准的Python环境中运行)或JNI(因为它似乎有一些令人讨厌的警告。)
编辑:到目前为止,我发现的唯一潜在技术是:Jpype 它会对我有用吗?此外,这是图书馆的理想要求。我会考虑使用Jython或JNI,如果其中一个确实最符合这些要求。
性能。 Oracle NoSQL的主要优点是性能和可伸缩性,因此这将是适配器最重要的组件。
易于为Python用户实现。为了让Python程序员真正使用该库,它们必须相对容易地以自然的方式使用。
可靠性。它需要有可能是值得信赖和无bug的,而在你自然希望Python工作的平台上工作。 (这就是让我关注JNI的原因。听起来它的实现与平台有关,而且容易出错。)
发展速度。最后一点是重要的是开发速度相对较快。开发人员团队喜欢学习Python或C,但我们现在比任何其他编程语言都更了解Java。
答案 0 :(得分:3)
我试图按顺序回答每一点,并附上自己的相关说明。
表现:我的观点是JNI会成为胜利者,但我可能会错,因为Jython也可以被JIT。
易于实施:我接受这个,因为你的意思是容易消费库?这完全取决于你如何构建API,1对1方法调用,对象句柄等。
可靠性:Jython在这里是明显的赢家,因为当您仅在客户端代码中实例化POJO /直接访问API时,没有出错的地方。
发展速度:JNI可能非常繁琐。您基本上学习CPython模块,C,Python扩展,JNI,然后引用用Java构建的现有API。
总而言之,如果你可以跳跃,我认为你可以在短期嵌入Jython中获得更多好处,主要是因为你可以直接操作API。我亲自在一个.NET代码库中嵌入了IronPython并取得了很好的成功。是的,你失去了本机速度,但是使用工作JNI桥所需的C编码量很难证明这种权衡。也就是说,您可能会发现像您列出的项目(Jpype)可以为您完成大部分工作。
我会问我在使用Jython时会丢失的本机CPython运行时的哪些功能。您在CPython中的现有代码库是否严重依赖于CPython本机功能?
无论如何,我有一个答案的尝试。