所以我在思考涉及将对象序列化到关系数据库的某些问题。
假设您有N个不同的对象,都实现了某个特定的接口(有关图形界面。它们提供getIncomingNodes(),getOutgoingNodes()等方法。)
如果每个此类对象在关系数据库中都有对应的表, 将这样的有向图序列化到关系数据库的最佳实践是什么?
假设N很小,(在我的情况下,N = 3)我将所有可能的链接分解为包含在单独的表中。 例如,从对象x指向y的链接表将类似于:
tbl_links_X_Y {
int X_id
int Y_id
}
问题是,你得到N ^ 2这样的表 - 效率不高,并且可能难以在将来扩展到N + 1个对象。
有没有解决这个问题的模式? (即使它不涉及关系数据库,我也很乐意听到......)
谢谢!Ø
答案 0 :(得分:0)
您也可以轻松地将对象类(表名)存储在连接表中。
tbl_links_X_Y {
int X_id
int Y_id
enum {user, customer, product} X_type
enum {user, customer, product} Y_type
}
他们只需将其包含在where或join子句中。
我想这不是一个严格的关系数据库,因为你不能(?)使用/强制执行外键约束。
答案 1 :(得分:0)
你也可以“强制”你的图表遵循关系模型:即
表格图{ 整数vertexid, varchar edgelist }
edgelist可以是一个基于分隔符的字符串:例如{2,10},{3,12},{4,13}等,其中条目是{事件顶点,重量}
这样,表中的行数将是O(n)而不是O(n ^ 2)
然后,当您的应用程序读取图形并执行某些操作时,您必须在内存中构建图形,并执行相同的操作。
答案 2 :(得分:0)
所以最近我遇到了NoSQL框架调用OrientDB。该数据库引擎完全处理了这个问题。 它是graph database,能够执行另一个对象指向的SQL查询和延迟加载对象(如相邻顶点)。
剩下的一件事是将此框架的性能与传统SQL数据库的性能进行比较。 (当然,我必须考虑在传统SQL数据库中从原始响应构造对象所需的时间。)
一旦我得到这个比较的结果,我会在这里发布它们。