我正在创建一个系统,使用SNMP以(可能)5分钟的间隔轮询设备以获取有关各种指标的数据,例如CPU利用率,磁盘利用率,温度等.最终目标是以时间序列图的形式为系统用户提供可视化.
我已经看过了,在过去使用的RRDTool,但拒绝了它作为存储捕获的数据无限地将我的项目很重要,我想更高层次和更灵活的访问捕获的数据.所以我的问题是:
什么是更好的关系数据库(如MySQL或PostgreSQL)或非关系数据库或NoSQL数据库(如MongoDB或Redis)在查询数据进行图形处理时的性能.
给定一个关系数据库,我将使用一个data_instances表,其中将存储为所有设备测量的每个度量捕获的每个数据实例,并包含以下字段:
领域: id fk_to_device fk_to_metric metric_value timestamp
当我想在特定设备上绘制特定指标的图形时,我必须查询此单个表,过滤掉其他设备,以及为此设备分析的其他指标:
SELECT metric_value, timestamp FROM data_instances
WHERE fk_to_device=1 AND fk_to_metric=2
Run Code Online (Sandbox Code Playgroud)
此表中的行数为:
d * m_d * f * t
Run Code Online (Sandbox Code Playgroud)
其中d是的数量的装置,m_d是累计度量的数目被记录为所有设备,f是频率在其中数据被轮询和t是总量时间系统已收集数据.
对于一年中每5分钟记录3个设备的10个度量标准的用户,我们将有不到500万条记录.
没有索引fk_to_device并且fk_to_metric扫描这个不断扩展的表将花费太多时间.因此,索引上述字段以及timestamp(用于创建具有本地化期间的图表)是必需的.
MongoDB具有集合的概念,与表不同,这些可以在没有设置的情况下以编程方式创建.有了这些,我可以为每个设备划分数据存储,甚至为每个设备记录每个指标.
我没有使用NoSQL的经验,也不知道它们是否提供任何查询性能增强功能,例如索引,但是前一段提出在数据存储在NoSQL下的结构中进行大多数传统的关系查询工作.
具有正确索引的关系解决方案是否会在一年内减少爬行?或者NoSQL方法的基于集合的结构(与我存储的数据的心智模型相匹配)是否提供了明显的好处?
database time-series non-relational-database relational-database nosql
我正在尝试使用a PriorityQueue来命令对象Comparator.
这可以很容易地实现,但是对象类变量(比较器计算优先级)可能在初始插入后发生变化.大多数人都提出了删除对象,更新值并再次重新插入的简单解决方案,因为这是优先级队列的比较器付诸行动的时候.
除了在PriorityQueue周围创建一个包装类之外,还有更好的方法吗?
我希望下面的代码只会初始化dict_a,dict_b以及dict_c字典.但它接触到副本通过效果:
dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'
print dict_a
print dict_b
print dict_c
Run Code Online (Sandbox Code Playgroud)
如您所见,结果如下:
{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
Run Code Online (Sandbox Code Playgroud)
为什么该程序会给出以前的结果,当我希望它返回时:
{}
{}
{'hello': 'goodbye'}
Run Code Online (Sandbox Code Playgroud) 我可以移动到python项目目录(比如c:\ www\myproject),然后发出
python manage.py shell
Run Code Online (Sandbox Code Playgroud)
然后我可以使用django项目中的所有模块,从shell命令中说出以下命令:
import settings
from django.template import Template, Context
t=Template("My name is {myname}.")
c=Context({"myname":"John"})
f = open('write_test.txt', 'w')
f.write(t.render(c))
f.close
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试将所有命令收集到python脚本中时,说"mytest.py",我无法执行脚本.我必须错过重要的事情.
我发出了python mytest.py
然后我得到Import error: could not import settings它是在sys路径上吗?"
我在settings.py所在的项目目录中......
有人可以帮帮我吗?
谢谢.
我试图使用python-daemon库,在我看来这是创建守护进程而不忘记任何东西最安全的方法.文件很差,只是PEP 3143.
另一方面,我发现了许多链接到Sander Marechal的Python中的一个简单的unix/linux守护进程.这看起来是一个更好的解决方案,或者我还没有尝试过使用它.
编辑:我使用过Sander Marechal的解决方案,它似乎很好用.
那么Python社区中创建一个守护进程的事实上的方法是什么呢,它是这些库中的一个,还是只是自己完成(分两次等)?
此外,您会认为任何带有PEP的库都是更好的选择,因为它比任何其他解决方案更接近创建守护进程(或至少更标准的方式)的综合方式.那么这个python-daemon包的处理是什么,它是否会包含在标准库中?
我正在创建一个对象,该对象跟踪有关创建,更新和删除UUIDSyncable数据库中其他所谓对象的更改(更新).
这涉及扩展UUIDSyncable类save()和delete()方法的任何对象,以这种方式创建一个Update记录动作的新对象(插入,更新或删除),最初是一个models.CharField(max_length=64)指定对象的UUID pk的字段UUIDSyncable.
此时我想更新实现以使用Django的generic.GenericForeignKey()字段而不是我的单个字符字段.这将使得能够以更简单的方式访问正在记录更新的对象.
当您希望删除对象并将其存储为Update对象时,我的问题就出现了,因为您知道Django会对UUIDSyncable要删除的对象执行级联删除,删除所有以前的Update记录(不需要).
当UUIDSyncable在我的原始实现中删除了该对象时,每个Update对象仍将保留UUID以通知外部各方其删除.我的第一个模拟这个的解决方案是content_object = None在删除所有对象上的Update对象之前设置,从而防止删除级联.
它的接缝generic.GenericForeignKey()无法设置为允许NULL值.有没有办法做到这一点,或者如果没有办法如何以类似的方式使用CharField持有UUID主键和CharField持有模型名称的sperate 的标准?
在使用构造函数overriden实例化Django表单时出现以下错误:
__init__() got multiple values for keyword argument 'collection_type'
Run Code Online (Sandbox Code Playgroud)
的__init__()功能(下面示出)被完全按照写入这个但# code代替我的逻辑.请注意,我基本上重写了表单(这是一个ModelForm)构造函数.
def __init__(self, collection_type, user=None, parent=None, *args, **kwargs):
# code
super(self.__class__, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
创建错误的调用如下所示:
form = CreateCollectionForm(
request.POST,
collection_type=collection_type,
parent=parent,
user=request.user
)
Run Code Online (Sandbox Code Playgroud)
我看不出错误弹出的原因.
编辑:这是构造函数的完整代码
def __init__(self, collection_type, user=None, parent=None, *args, **kwargs):
self.collection_type = collection_type
if self.collection_type == 'library':
self.user = user
elif self.collection_type == 'bookshelf' or self.collection_type == 'series':
self.parent = parent
else:
raise AssertionError, 'collection_type must be "library", "bookshelf" or "series"'
super(self.__class__, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
编辑:Stacktrace …
我想知道如何制作一个简单的条形图,可能有一天作为x轴,值为'今天'和'昨天',而y轴可能是'时间',相应的值为'1'和'2 ".我想我很困惑,如何设置文本为x轴的值,如何显示Y轴,究竟rgaxis呢...(我发现使用一个例子axis = r.g.axis(0,300,400,0,500,8,2),我只知道这是xpos,ypos,width,??,?? num ticks,??).任何见解都会很棒!或者包含功能更全面的条形图示例(标签等)的页面.谢谢.
为什么我创建的模型实例,从后来直接启动的芹菜任务中查询,未找到?例如:
# app.views
model = Model.objects.create() # I create my lovely model in a view
from app.tasks import ModelTask # I import my Async celery task
ModelTask.delay(model.pk) # I start the task
Run Code Online (Sandbox Code Playgroud)
这一切看起来都很好,当然如果我在create()调用后的任何时候查询模型应该存在于数据库中.
更新1:我正在使用transaction.autocommitDjango为我的视图提供的默认行为.
但是下面的任务抛出ObjectDoesNotExist异常:
# app.tasks
class ModelTask(Task):
def run(self, model_pk):
from app.models import Model
Model.objects.get(pk=model_pk)
Run Code Online (Sandbox Code Playgroud)
在我的测试中,正如预期的那样,model_pk是一个正确的正整数ID.
我认为有一些异步/"分开处理"在这里出现的问题,但我不知道它是什么.如果觉得我有一些明显的错误.
我不认为数据库事务是答案,因为Django的默认"自动提交"方法确保在create()调用方法后立即执行数据库操作.
我怎么能在coq中证明一个函数f接受bool true|false并返回一个bool true|false(如下所示),当对一个bool应用两次时true|false总会返回相同的值true|false:
(f:bool -> bool)
Run Code Online (Sandbox Code Playgroud)
例如函数f只能做4件事,让我们调用函数的输入b:
truefalseb(即如果b为真则返回true,反之亦然)not b(即如果b为真,则返回false,副)因此,如果函数始终返回true:
f (f bool) = f true = true
Run Code Online (Sandbox Code Playgroud)
如果函数总是返回false,我们会得到:
f (f bool) = f false = false
Run Code Online (Sandbox Code Playgroud)
对于其他情况,让我们假设函数返回 not b
f (f true) = f false = true
f (f false) = f true = false
Run Code Online (Sandbox Code Playgroud)
在两种可能的输入情况下,我们总是最终得到原始输入.如果我们假设函数返回,则同样成立b.
那么你如何在coq中证明这一点?
Goal forall (f:bool -> bool) (b:bool), f (f b) …Run Code Online (Sandbox Code Playgroud) django ×4
python ×3
asynchronous ×1
celery ×1
coq ×1
daemon ×1
database ×1
django-forms ×1
graphael ×1
java ×1
nosql ×1
raphael ×1
time-series ×1