我想使用对象数据库来保存在IronPython中创建的一些类.该数据库是db4o for .NET 2.0(今天下载).代码如下所示:
import clr
clr.AddReferenceToFileAndPath(r"C:\dev\Db4objects\db4o-7.12-net20\bin\net-2.0\Db4objects.Db4o.dll")
from Db4objects.Db4o import *
db = Db4oFactory.OpenFile(r'G:\IronPython\test\db4o\database.db')
class Person(object):
def __init__(self, name, age):
self.Name = name
self.Age = age
def __str__(self):
return 'Person: ' + self.Name + ' ' + str(self.Age)
p1 = Person('testp', 34)
db.Store(p1)
Run Code Online (Sandbox Code Playgroud)
我得到例外 db.Store(p1)
Unexpected char '$'
ThrowUncheckedException at offset 4 in file:line:column <filename unknown>:0:0
FatalShutdown at offset 136 in file:line:column <filename unknown>:0:0
AsTopLevelCall at offset 112 in file:line:column <filename unknown>:0:0
AsTopLevelStore at offset 34 in file:line:column <filename unknown>:0:0 …Run Code Online (Sandbox Code Playgroud) 我正在使用对象数据库(ZODB)来存储许多对象之间的复杂关系,但遇到了性能问题.结果我开始构建索引以加速对象检索和插入.这是我的故事,我希望你能提供帮助.
最初,当我将对象添加到数据库时,我会将其插入专用于该对象类型的分支中.为了防止表示同一实体的多个对象,我添加了一个迭代分支中现有对象的方法,以便查找重复项.这首先起作用,但随着数据库的大小增加,将每个对象加载到内存中并检查属性呈指数增长和不可接受的时间.
为了解决这个问题,我开始根据对象中的属性创建索引,以便在添加对象时,它将保存在类型分支中以及属性值索引分支中.例如,假设我正在使用属性firstName ='John'和lastName ='Smith'保存人物对象,该对象将附加到人物对象类型分支,并且还将附加到属性索引分支中的列表中,并带有键'约翰和'史密斯'.
由于可以分析新对象并且仅需要检查在属性索引内相交的对象集,因此通过重复检查节省了大量时间.
但是,在更新对象时,我很快遇到了另一个问题.索引需要更新以反映它们可能不再准确的事实.这需要记住旧值,以便可以直接访问它们并删除对象或迭代属性类型的所有值,以便找到然后删除对象.无论哪种方式,性能很快就会逐渐降低,我无法找到解决问题的方法.
你以前遇到过这种问题吗?你做了什么解决,或者这只是我在使用OODBMS时需要处理的事情?
提前感谢您的帮助.
我正在开发一个开源产品,需要嵌入式dbms.你能推荐一个嵌入式开源数据库......
我查看了一些文档DBMS,比如mongodb,但它们似乎仅限于4或16 MB的文档.
伯克利数据库看起来很有吸引力但有许可证的GPL.
Sqlite3很有吸引力:很好的许可证,您可以使用您喜欢的任何最大blob大小进行编译.但是,它不是Java.我知道JDBC驱动程序存在,但我们需要一个纯Java系统.
有什么建议?
谢谢
史蒂夫
我看过这篇文章:http: //jenkins-ci.org/content/summary-report-git-repository-disruption-incident-nov-10th
它描述了用户意外触发git push --force存储库过时状态的事件.
当然,这需要一些清理来恢复原始状态分支.但是,由于Git从不删除信息,因为据我所知,这种清理过程总是可行的.
所以,即使你重新推出,推入--force(以及其他可能重写历史记录的操作)原始提交仍然在那里,他们只需要找到正确的?
简而言之,git中的任何(破坏性)操作实际上都会删除数据?
我有一个http请求,它从nosql数据库获取此Json对象:
let jsonBody = {
birthday : 1997,
firstname: 'foo',
lastname:'bar'
}
Run Code Online (Sandbox Code Playgroud)
然后,我想将此信息加载到Student模型中:
class Student{
constructor(){
}
getFullname(){
return this.lastname+' '+this.firstname
}
getApproxAge(){
return 2018- this.birthday
}
}
Run Code Online (Sandbox Code Playgroud)
通常,我会将此方法添加到此类中:
fromJson(json){
this.studentId = json.studentId;
this.birthday = json.birthday;
this.firstname = json.firstname;
this.lastname = json.lastname;
}
Run Code Online (Sandbox Code Playgroud)
我将使用它如下:
let student = new Student()
student.fromJson(jsonBody)
console.log(student.getFullname())
console.log(student.getApproxAge())
Run Code Online (Sandbox Code Playgroud)
这很好,但我的问题是我有:现实中有100个专有权。我是否必须使用fromJson方法一一列出所有属性?
而且,如果专有名称发生了更改,那么说:姓氏变为姓氏,我将不得不对其进行修复?
有没有更简单的方法将这些值动态地分配给对象学生,但保留其所有方法呢?
像这样:
fromJson(json){
this = Object.assign(this, json) //THIS IS NOT WORKING
}
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试选择数据库供应商.
我只是在寻找其他数据库开发人员的个人意见.
我的问题特别针对那些:
1)使用了支持复制到磁盘(混合)的主内存数据库(MMDB)(即ExtremeDB)
要么
2)使用了Versant对象数据库和/或客观数据库和/或Progress ObjectStore
问题是:如果你可以根据你的经验推荐一个适合我的应用程序的数据库供应商.
我的应用程序是一个商业实时(读取:高性能)面向对象的C++ GIS类应用程序,我们需要进行大量的lat/lon搜索(即给定一个区域,找到该区域内的所有匹配目标. ..R-Tree索引).
我想要存储到数据库中的数据类型都被建模为对象,它们使用std :: list和std :: vector,所以自然,Object Database似乎有意义.我已经阅读了足够多的文章来说服自己,传统的RDBMS可能不是我真正想要的
但是,就性能而言,
输入数据以大约40 MB/s的速度馈入系统.
因此,系统也将以每秒大约350次插入的速率插入数据库(每个对象从64KB到128KB),
根据我的理解,我在这里列出的所有对象数据库都使用缓存来存储数据库对象.ExtremeDB声称,因为它专为内存而设计,它可以避免缓存逻辑等的开销.通过googling查看更多内容:主内存与RAM-Disk数据库:基于Linux的基准测试
所以..我只是有点困惑.可以在实时系统中使用对象DB吗?它是否像MMDB一样"快"?
我正在寻找创建一个网站,我想尝试学习对象数据库或文档数据库.我将使用托管服务提供商,因此我将无法安装任何软件.我无法购买任何许可证,因此我需要能够使用免费或开源的对象/文档数据库.是否有任何免费的对象/文档数据库不需要安装某种类型?
只是认为带有ORM的关系数据库在很多方面与面向对象的数据库非常相似.我的经验完全在于RDMS带有一些ORM,所以在我看来,面向对象的数据库非常相似,但没有经验我无法肯定.
如果您使用面向对象的数据库和ORM,您可以比较它们吗?与RBMS + ORM相比,与面向对象数据库相关的弱点是什么?
假设我想在面向对象编程语言中创建一个应用程序,即Java
从下面做的更好的事情是什么?
- 使用关系数据库即mySQL +对象关系映射即Hibernate
要么.
- 使用面向对象的数据库即db4o
为什么?
我有一个关于如何在使用诸如mysql之类的RDBMS时使用面向对象方法的问题.我正在开发一个跟踪计费的小应用程序.它是用java构建的,我使用MySQL数据库来存储数据.我的应用程序有一个客户和产品类.现在通常,如果我使用数组或不同的数据容器处理持久性数据存储,我会对客户类进行更新,删除等,对产品类进行更新.然而,我发现自己使用比以往更多的静态方法.因为我没有一个客户阵列,例如我只有一个带有客户信息的数据库,所以当我只能调用一个删除客户(或产品)的静态方法时,我认为创建客户对象只是为了删除它没有意义.在它的主要身份.最后,我觉得没有理由创建客户或产品类,因为不需要特定的方法.
我想问的是,在使用RDBMS时,您如何采用面向对象的方法?