标签: sqlite

PHP中分布式系统的剖析

我有一个问题,这让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的方案.

我有一台服务器将收到几个客户的订单.每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户A提交的任务AA应该在2009-12-31和2010-12-31之间每分钟执行一次 ; 因此,如果我的数学是正确的,一年中大约525 600次操作,给定更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工人机器的想法.服务器将在PHP上开发.

工作机器只是常规廉价 的基于Windows的计算机,我将在我的家中或工作场所托管,每个工作人员将拥有专用的Internet连接(带有动态IP)和UPS以避免断电.每个工作人员还将通过Web服务调用每隔30秒左右查询服务器,获取下一个待处理作业并进行处理.作业完成后,工作人员会将输出提交给服务器,并无限期地请求新作业.如果需要扩展系统,我应该设置一个新的工作者,整个事情应该无缝运行.工作者客户端将使用PHP或Python开发.

在任何给定时间,我的客户端都应该能够登录到服务器并检查他们订购的任务的状态.

现在这里是棘手的部分:

  • 如果由于某种原因服务器出现故障,我必须能够重建已处理的任务.
  • 工作人员不是特定于客户的,一个工人应该为任何给定数量的客户处理工作.

我对一般数据库设计和使用哪些技术有一些疑问.

最初我想过使用几个SQLite数据库并将它们全部加入到服务器上,但我无法弄清楚如何按客户端分组来生成作业报告.

我从来没有真正使用过以下任何技术:memcached,CouchDB,Hadoop等等,但我想知道这些是否适用于我的问题,如果是的话,你推荐给新手使用的是像我这样的"分布式计算"(或者这是平行的吗?).请记住,工人拥有动态IP.

就像我之前说过的那样,我也遇到了一般的数据库设计问题,部分是因为我还没有选择任何特定的R(D)DBMS但是我认为它与我选择的DBMS无关的一个问题是相关的到排队系统 ...我应该预先计算特定作业的所有绝对时间戳并具有大量时间戳,执行并按升序标记它们,或者我应该有一个更聪明的系统,如" 当时间戳模数60 = = 0 - >执行 ".这个"聪明"系统的问题在于,某些工作不会按顺序执行,因为有些工作人员可能在等待其他人过载时无所事事.你有什么建议?

PS:我不确定这个问题的标题和标签是否恰当地反映了我的问题和我想要做的事情; 如果没有请相应编辑.

感谢您的输入!

@timdev:

  1. 输入将是一个非常小的JSON编码字符串,输出也将是一个JSON enconded字符串,但稍大一点(大约1-5 KB).
  2. 输出将使用来自Web的几个可用资源来计算,因此主要瓶颈可能是带宽.数据库写入也可以是一个 - 取决于R(D)DBMS.

php sqlite distributed database-design couchdb

27
推荐指数
1
解决办法
6658
查看次数

如何从SQLAlchemy映射对象中发现表属性

我有一个用表映射的类,在我的例子中是以声明的方式,我想从这个类中"发现"表属性,列,名称,关系:

engine = create_engine('sqlite:///' + databasePath, echo=True)

# setting up root class for declarative declaration
Base = declarative_base(bind=engine)

class Ship(Base):
    __tablename__ = 'ships'

    id = Column(Integer, primary_key=True)
    name = Column(String(255))

    def __init__(self, name):
            self.name = name

    def __repr__(self):
            return "<Ship('%s')>" % (self.name)
Run Code Online (Sandbox Code Playgroud)

所以现在我的目标是从"Ship"类中获取另一段代码中的表列及其属性.我想我可以使用检测来处理它,但SQLAlchemy API是否提供了任何方法?

python sqlite instrumentation sqlalchemy

27
推荐指数
1
解决办法
2万
查看次数

使用SimpleCursorAdapter从Cursor更改值

我有数据库表,列{名称,时间(UTC格式),纬度,经度}

我使用带有SimpleCursorAdapter的ListActivity显示表.

我希望列Time以人类可读格式显示时间(13-07-2010 10:40)而不是UTC格式(18190109089).

如何指定列Time中的值需要一些过滤/适应?

可能的解决方案(有问题):

SimpleCursorAdapter提供的方法:

setCursorToStringConverter(SimpleCursorAdapter.CursorToStringConverter cursorToStringConverter);
Run Code Online (Sandbox Code Playgroud)

指定一个能够将Cursor转换为CharSequence的类(convertToString(Cursor cursor).无论如何我不知道返回CharSequence参数的格式应该是多少!

sqlite android filtering cursor

27
推荐指数
2
解决办法
2万
查看次数

从哪里开始阅读SQLite源代码?

我想了解sqlite是如何实现的.并且,想要阅读源代码(我已经下载了源代码).我应该开始考虑哪部分代码?

c sqlite open-source

27
推荐指数
1
解决办法
8405
查看次数

SQLAlchemy查询列包含子字符串的位置

我正在使用SQLAlchemy和SQLite3构建一个查询,我想在其中选择一个String列包含特定子字符串的行.完成此任务的最佳方法是什么?

python sqlite sqlalchemy

27
推荐指数
4
解决办法
4万
查看次数

检查有效的SQL列名称

你如何在php中检查字符串是否是sql语句的有效兼容列名?只是一个字符串匹配.

php mysql sqlite postgresql

27
推荐指数
1
解决办法
2万
查看次数

SQLite添加列,保留数据

我有一个包含4列的数据库:

@Override
public void onCreate(SQLiteDatabase database) {
        database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT);");
}
Run Code Online (Sandbox Code Playgroud)

现在我想添加另一列,但保留已存在于数据库中的行.我该怎么做?我找不到任何有用的参考资料.

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    //What to do here?
}
Run Code Online (Sandbox Code Playgroud)

编辑

我已将onCreate修改为:

@Override
public void onCreate(SQLiteDatabase database) {
    database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT, code TEXT);");
}
Run Code Online (Sandbox Code Playgroud)

和我的onUpgrade:

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    Logger.log("Updating userstations database from …
Run Code Online (Sandbox Code Playgroud)

sqlite android

27
推荐指数
2
解决办法
3万
查看次数

在SQLite 3中启用查询日志记录

是否有任何内置函数可以在SQLite中启用查询日志.

我熟悉Trace API,但我想知道它是否有任何预定义的功能.

sqlite logging

27
推荐指数
1
解决办法
2万
查看次数

sqlite将文本转换为数字

我有一个带有以下结构的表的sqlite DB LocationName纬度经度都定义为varchar.我如何构造一个sql语句来获得具有特定纬度范围的所有位置给定纬度为十进制.有没有办法在运行时将varchar转换为十进制值?或者我必须单步执行return语句并手动进行转换

sqlite ios

27
推荐指数
1
解决办法
6万
查看次数

如何在sqlite中使用ROW_NUMBER

这是我在下面给出的查询.

select * from data where value = "yes";
Run Code Online (Sandbox Code Playgroud)

我的id是自动增量,下面是给定查询的结果.

id || value 
1  ||   yes
3  ||   yes
4  ||   yes
6  ||   yes
9  ||   yes
Run Code Online (Sandbox Code Playgroud)

如何在sqlite中使用ROW_NUMBER?这样我就可以得到下面给出的结果.

NoId || value 
1    ||   yes
2    ||   yes
3    ||   yes
4    ||   yes
5    ||   yes
Run Code Online (Sandbox Code Playgroud)

ROW_NUMBER作为NoId.

sqlite row-number android-sqlite

27
推荐指数
2
解决办法
7万
查看次数